当前位置: 首页 > 知识库问答 >
问题:

获取composer(php依赖项管理器)在docker映像构建上运行

胡元明
2023-03-14

注意:我不再使用这个环境,所以我没有办法测试答案并接受答案。对不起.

您能给我指出一个使用composer处理PHP依赖关系的docker映像的例子吗?

我正在使用docker php映像构建一个docker映像,我需要做的是安装composer并在映像创建时或映像构建时运行一个composer更新命令(不知道两者是否都可以)。

我可以通过手动执行所有步骤(运行一个docker映像,敲击它,复制和粘贴每一个步骤)来运行一切。

但是当我在Dockerfile上执行所有这些步骤时,我无法让composer编写文件。

我一直试图得到一个最小失败的例子一段时间,但我得到的一个是相当不是最小。

我的测试由以下内容组成(以下链接到相关的github repos)

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
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

我的测试如下

>

  • 在包含上面粘贴的Dockerfile的目录中生成执行此命令的映像

     docker build -t miqueladell/composed_wordpress_test .
    

    日志中没有错误)

     docker-compose up
    

    敲击正在运行的容器以查看文件是否在那里

     docker exec -i -t miqueladellv2_wordpress_1 bash
    

    /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#
    
      null
  • 共有1个答案

    席嘉祯
    2023-03-14

    这样安装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.*
    
     类似资料:
    • cp/var/ww/html/config.inc.php.dist/var/ww/html/config.inc.php 未安装。 DockerFile:

    • 目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个

    • 我有以下文件夹结构: 这里,我的是: 当我运行时,我希望有两个输出图像,一个用于,一个用于。 我使用(仅与版本2的语法兼容)。

    • 我试图从docker容器中安装curl,但由于以下错误而失败,我尝试设置代理-No go 尝试的步骤: > 使用Dockerfile构建docker 使用构建参数HTTP_PROXY构建 Docker 构建 docker登录到repo,然后尝试构建镜像-no go 使用 env 代理更新 config.json 文件 - 不行 使用不同的代理 试图刷新windows pc上的DNS docker构

    • 我在bitbucket管道构建过程中收到了这个错误。我想念火药罐。 生成失败错误: 有关环境的详细信息: > 使用Gradle的Android Studio项目 Bitbucket(云)管道CI 在我的Docker容器中为我的构建安装Firebase和其他未来的依赖项,这样管道就可以构建我的Android项目 到目前为止我所拥有的: 该应用程序在本地构建良好。您需要在Android Studio中

    • 问题内容: 我正在进入Node.js代码库,该代码库要求我通过NPM(即jQuery)下载一些依赖项。 在尝试运行时,我不断出现此错误: 看来失败是由于缺少Python安装造成的。好了,我已经安装了Python,设置了变量,然后重新启动,仍然是错误。 关于我所缺少的任何线索吗? 问题答案: 您的问题是您 没有 设置环境变量。 该错误清楚地表明: 在评论中,您说您这样做: 很好,但是没有设置变量,而