gpt4 book ai didi

php - 让 Composer (php 依赖管理器)在 docker 镜像构建上运行

转载 作者:IT老高 更新时间:2023-10-28 12:36:19 35 4
gpt4 key购买 nike

TL;DR您能否指出一个使用 composer 处理 PHP 依赖项的 docker 镜像示例?


我在这篇文章中的所有问题都是关于 composer php 依赖工具 不是 docker-composer fig 的继任者em>。

我正在尝试构建自己的 docker 镜像来运行 WordPress installed as a composer dependency .

我正在使用 docker PHP 镜像作为基础构建 docker 镜像,我需要做的是安装 composer 并在镜像创建时间或镜像构建时间运行 composer update 命令(不知道是否两者都可以)。

我可以通过手动执行所有步骤(运行 docker 镜像,对其进行攻击,然后复制和粘贴每个步骤)来正常运行所有内容。

但是当我将所有这些步骤放在 Dockerfile 上时,我没有让 composer 来编写文件。

一段时间以来,我一直在尝试获得一个最低限度的失败示例,但我得到的并不是最低限度。

我的测试由以下部分组成(下面是相关 github repos 的链接)

Dockerfile

NFORMATION ~~~#

# based on
# https://hub.docker.com/r/richarvey/nginx-php-fpm/
# and
# https://hub.docker.com/_/wordpress/

FROM php:7.0.2-apache

MAINTAINER Miquel Adell <miquel@miqueladell.com>

ENV WORDPRESS_VERSION 4.4.1



#~~~ DEPENDENCIES ~~~#

# Add PHP repository to apt source
RUN apt-get update \
&& apt-get install -y \
libpng12-dev \
libjpeg-dev \
curl \
sed \
zlib1g-dev \
&& docker-php-ext-install \
zip \
mysqli

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer



#~~~ DIRS ~~~#

WORKDIR /var/www/html/



#~~~ WORDPRESS ~~~#

COPY files/composer.json composer.json
ONBUILD RUN composer update

docker-compose.yml

wordpress:
image: miqueladell/composed_wordpress_test
links:
- wordpress_db:mysql
environment:
- VIRTUAL_HOST=miqueladell.dev
- WORDPRESS_DB_NAME=wordpress
ports:
- "80"

wordpress_db:
image: miqueladell/mariadb-utf8mb4
environment:
- MYSQL_ROOT_PASSWORD=password

我的测试如下

  1. 在包含上面粘贴的 Dockerfile 的目录中构建执行此命令的镜像

     docker build -t miqueladell/composed_wordpress_test .

    (日志中没有错误)

  2. 通过在包含上面粘贴的 docker-compose.yml 的目录中运行以下命令,使用该镜像构建容器

     docker-compose up

    (日志中没有错误)

  3. bash 进入正在运行的容器以查看文件是否存在

     docker exec -i -t miqueladellv2_wordpress_1 bash
  4. /var/www/html 的 ls

     root@bff14367658b:/var/www/html# ls -al
    total 12
    drwxr-xr-x 2 www-data www-data 4096 Jan 19 10:50 .
    drwxr-xr-x 5 root root 4096 Jan 19 10:50 ..
    -rw-r--r-- 1 root root 138 Jan 15 09:18 composer.json

您可以在第 4 步中看到 composer update 似乎根本没有运行。

我都试过了

RUN composer update

ONBUILD RUN composer update

在 Dockerfile 上结果相同。

如果我回到测试的上一步 4 并在 docker 容器的 bash 提示符下手动运行 composer update,我会得到:

root@bff14367658b:/var/www/html# composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing johnpbloch/wordpress-core-installer (0.2.1)
Downloading: 100%

- Installing johnpbloch/wordpress (4.4.1)
Downloading: 100%

Writing lock file
Generating autoload files
root@bff14367658b:/var/www/html# ls -al
total 24
drwxr-xr-x 4 www-data www-data 4096 Jan 19 11:12 .
drwxr-xr-x 6 root root 4096 Jan 19 11:12 ..
-rw-r--r-- 1 root root 138 Jan 15 09:18 composer.json
-rw-r--r-- 1 root root 3718 Jan 19 11:12 composer.lock
drwxr-xr-x 4 root root 4096 Jan 19 11:12 vendor
drwxr-xr-x 5 root root 4096 Jan 19 11:12 wordpress
root@bff14367658b:/var/www/html#

这正是我在第 4 步所期望的输出

github 链接到完整文件

最佳答案

像这样安装composer可以避免这个问题:

RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \
&& curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \
# Make sure we're installing what we think we're installing!
&& php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \
&& php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --snapshot \
&& rm -f /tmp/composer-setup.*

关于php - 让 Composer (php 依赖管理器)在 docker 镜像构建上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34875581/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com