使用dockerfile安装Composer

时间:2018-09-05 13:07:13

标签: php docker docker-compose composer-php dockerfile

我对docker很陌生,我尝试在Dockerfile中自动执行composer安装,但似乎安装时无法cd到我的应用程序中,这是怎么回事?或者,也许还有另一种更好的方法?

我的docker-compose.yml

version: "3.1"
services:

    app:
      image: nginx:alpine
      container_name: app
      working_dir: /application
      volumes:
          - ./Projects/app:/application/app
          - ./Docker/nginx/app.conf:/etc/nginx/conf.d/app.conf
      ports:
          - "8080:8080"

    php-fpm-app:
      build: Docker/php-fpm-app
      container_name: php-fpm-app
      working_dir: /application
      volumes:
          - ./Projects:/application
          - ./Docker/php-fpm-app/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

我的Dockerfile

FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

RUN mkdir -p /var/www/.composer \
    && chown -R www-data:www-data /var/www/.composer

USER www-data

RUN cd /application/app; composer install

运行此命令后的输出:

  

docker-compose up -d

Step 6/6 : RUN cd /application/app; composer install
 ---> Running in ac53e653af46
/bin/sh: 1: cd: can't cd to /application/app
Composer could not find a composer.json file in /application
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
ERROR: Service 'php-fpm-app' failed to build: The command '/bin/sh -c cd /application/app; composer install' returned a non-zero code: 1

如果我尝试从Dockerfile中删除最后一行,请在运行以下命令后将其启动并运行:

  

docker-compose exec --user www-data php-fpm-app bash -c'cd   / application / app && composer install'

它起作用了,我不明白为什么我的Dockerfile无法做到这一点。

=========================== 最后 我找到了一种执行脚本的方法,但看不到输出,因此如果脚本持续许多秒/分钟,我将不知道它何时完成。

ADD ./setup.sh /setup.sh
RUN chmod +x /setup.sh
CMD ["sh", "/setup.sh"]

我决定在脚本全部启动并运行后手动执行

sh ./setup.sh

4 个答案:

答案 0 :(得分:0)

我认为您缺少以下步骤:

COPY composer.json ./

尝试将其放在composer install

之前

答案 1 :(得分:0)

您不应在Dockerfile中运行composer install。这将失败,因为您尚未从本地到容器创建/同步卷。因此,包括composer.json在内的所有文件都不会放在/ var / www / html下。

您可以做的就是在服务内部的docker-compose.yaml文件中添加1行(命令)。

services:
  api-php-fpm:
    build: ./docker/php-fpm
    command: sh -c "composer install"

答案 2 :(得分:0)

这是因为在构建完成之前不会安装卷。只需使用 COPY 将 only composer.json 复制到文件夹中,然后正常运行 composer install。

答案 3 :(得分:-1)

参考Documentation for Dockerfiles,您需要编辑Dockerfile。

应该是:

WORKDIR /application/app
RUN composer install

这可以解决您的问题吗?