我正在尝试创建一个composer
容器(Dockerfile
)并在我的docker-compose.yml
中使用此容器,但是看来该容器没有启动。
每次运行docker-compose up
docker_composer_1退出,代码为0
这些是我的Dockerfile
和docker-compose.yml
文件:
Dockerfile
#composer
FROM composer
EXPOSE 9090
docker-compose.yml
version: '3'
services:
php-fpm:
build:
context: ./php-fpm
volumes:
- ../src:/var/www
nginx:
build:
context: ./nginx
ports:
- "80:80"
volumes:
- ../src/html:/var/www/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
depends_on:
- php-fpm
database:
build:
context: ./database
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=mydb
- MYSQL_USER=myuser
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=docker
volumes:
- ./database/data.sql:/docker-entrypoint-initdb.d/data.sql
phpmyadmin:
build:
context: ./phpmyadmin
environment:
- PMA_HOST=database
- PMA_PORT=3306
- MYSQL_ROOT_PASSWORD=docker
ports:
- "8080:80"
depends_on:
- database
composer:
build:
context: ./composer
volumes:
- ../src/html:/var/www/html
ports:
- "9090:80"
我不想将Composer安装到php容器中。 我认为这不是一个很好的解决方案。
我该如何解决这个问题?
答案 0 :(得分:1)
composer
是一个程序包管理器,与“服务”相对应,不是一个永无止境的过程。
composer
命令旨在运行一次,执行任务并在完成任务后(例如,安装或更新软件包,显示软件包信息等)以状态码结尾。如果命令成功运行,则此状态码为0
;如果命令失败,则此状态码为非零。
以状态代码
0
激发容器的消息不是失败指示,而是每个composer [..]
命令的预期行为。
启动composer
容器时,它将执行CMD
在Dockerfile
中配置的容器的默认命令,并退回到ENTRYPOINT
composer
可执行文件,不带任何参数。
您可以通过运行以下方法来验证此行为:
docker-compose logs composer
composer
只是一个实用程序,因此不应在docker-compose.yml
中定义为“服务”。您可以将其保留在其中,以便能够运行快速的一次性命令,例如:
docker-compose run composer install
...但是您必须忍受命令已退出的提示。
docker-compose
不是任务运行程序,也不是为一次性命令设计的。维护者拒绝了一些实现功能以支持此类功能的建议。
示例:
docker-compose up
->参见某些issue