簡體   English   中英

為什么在 dockerfile 中運行的 composer install 命令中看不到卷目錄中的 composer.json 文件?

[英]Why composer.json file from volume directory is not visible in composer install command run in dockerfile?

docker-compose.yml:

version: '3.3'
services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./api:/var/www/html/api
            - ./site.conf:/etc/nginx/conf.d/default.conf
        links:
            - php
    php:
        build:
            context: ./docker
            dockerfile: php.Dockerfile
        volumes:
        - ./api:/var/www/html/api
        links:
            - db
    db:
       image: mysql:5.7 
       environment:
         MYSQL_ROOT_PASSWORD: password
         MYSQL_DATABASE: symfony
         MYSQL_USER: symfony
         MYSQL_PASSWORD: symfony
       ports:
         - "9906:3306"

php.Docker 文件:

FROM php:7-fpm
WORKDIR /var/www/html/api
COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y git libzip-dev unzip \
    && docker-php-ext-install \
        pdo_mysql zip \
    && docker-php-ext-enable \
        pdo_mysql zip \
    && composer install \
    && bin/console make:migration

命令輸出錯誤: docker-compose build --no-cache

Composer 在 /var/www/html/api 中找不到 composer.json 文件

但是,當我使用docker exec -it sf4_php_1 bash在 PHP 容器中時

我看到composer.json文件在/var/www/html/api ,我能夠正確運行composer install

我做錯了什么?

卷是在運行時安裝的,而不是在構建時。

當您構建映像時,其中沒有composer.json因為您的卷尚未安裝。

在運行composer install之前,您需要復制構建過程所需的所有文件。

例如,一個更好的Dockerfile應該是這樣的:

(在這種情況下,我帶來了一些 Symfony 文件,因為這是從 Symfony 圖像復制的)

COPY --from=composer /usr/bin/composer /usr/bin/composer

RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y git libzip-dev unzip \
    && docker-php-ext-install \
        pdo_mysql zip \
    && docker-php-ext-enable \
        pdo_mysql zip

RUN mkdir -p /var/www/html/api
WORKDIR /var/www/html/api

COPY composer.json composer.lock symfony.lock .env.dist ./

RUN composer install \
    && bin/console make:migration

這不僅會實際工作,還會為構建應用程序和安裝平台要求生成不同的層。 這樣, composer.json更改不會觸發重新安裝 PHP 擴展和更新 apt。

暫無
暫無

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

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