php - Composer 使用 dockerfile 安装

标签 php docker docker-compose composer-php dockerfile

我是 docker 的新手,我尝试在我的 Dockerfile 中自动执行 composer install 但似乎我无法在安装时 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

最佳答案

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

您可以做的是将 1 行(命令)添加到服务内的 docker-compose.yaml 文件中,例如。

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

关于php - Composer 使用 dockerfile 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52185927/

相关文章:

php - 在递归调用中使用先前调用的参数而不作为参数发送 - PHP

python - Dockerfile 添加失败 : No Source files were specified

docker - Next.js 获取在 Docker 中出现 ECONNREFUSED 错误(Strapi 作为后端)

wordpress - 在运行 docker compose 时添加新端口

java - 与 Spring Boot Docker 容器的服务间 RestTemplate 通信问题

elasticsearch - Drupal中具有DDEV和Elasticsearch连接器的问题

php - 如何使用 jwt-auth 在 Laravel 中正确设置 JWT secret ?

javascript - HTTP 405 API jquery ajax PHP

phpmyadmin 未打开并显示 "The page isn' t 工作 HTTP 错误 500”

php - Docker-缓存的已装载卷同步延迟