RaK*_*Dev 4 php composer-php docker dockerfile docker-compose
我对 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
Run Code Online (Sandbox Code Playgroud)
我的 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
Run Code Online (Sandbox Code Playgroud)
我运行此命令后的输出:
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
Run Code Online (Sandbox Code Playgroud)
如果我尝试从 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"]
Run Code Online (Sandbox Code Playgroud)
我决定在脚本全部启动并运行后手动执行它
sh ./setup.sh
Run Code Online (Sandbox Code Playgroud)
您不应该在 Dockerfile 中运行composer install。它将失败,因为您尚未从本地创建/同步卷到容器。因此,包括composer.json在内的所有文件都不会放置在/var/www/html下。
您可以做的就是在服务内的 docker-compose.yaml 文件中添加 1 行(命令),例如:
services:
api-php-fpm:
build: ./docker/php-fpm
command: sh -c "composer install"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13941 次 |
| 最近记录: |