[英]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.