簡體   English   中英

使用 dockerfile 安裝 Composer

[英]Composer install with 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"

這是因為在構建完成之前不會安裝卷。 只需使用 COPY將 composer.json 復制到文件夾中,然后正常運行 composer install。

引用為Dockerfiles文檔,你需要編輯Dockerfile。

它應該是:

WORKDIR /application/app
RUN composer install

這能解決您的問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM