Cod*_*ium 3 php composer-php docker
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"
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
命令输出错误docker-compose build --no-cache::
Composer 在 /var/www/html/api 中找不到 composer.json 文件
但是,当我在 PHP 容器中使用时 docker exec -it sf4_php_1 bash
我看到那个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
Run Code Online (Sandbox Code Playgroud)
这不仅会实际工作,还会为构建应用程序和安装平台要求生成不同的层。这样,更改composer.json不会触发重新安装 PHP 扩展和更新 apt。
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |