PHP的容器';s composer软件包管理器显示消息/错误:";docker“U composer”U 1已退出,代码为“0”;与docker撰写
我正在尝试创建一个PHP的容器';s composer软件包管理器显示消息/错误:";docker“U composer”U 1已退出,代码为“0”;与docker撰写,docker,docker-compose,composer-php,yaml,dockerfile,Docker,Docker Compose,Composer Php,Yaml,Dockerfile,我正在尝试创建一个composer容器(Dockerfile),并在我的docker compose.yml中使用此容器,但看起来容器没有启动 每次运行docker compose up docker_编写器_1已退出,代码为0 这些是我的Dockerfile和docker compose.yml文件: Dockerfile #composer FROM composer EXPOSE 9090 docker-compose.yml version: '3' services: php-
composer
容器(Dockerfile
),并在我的docker compose.yml
中使用此容器,但看起来容器没有启动
每次运行docker compose up
docker_编写器_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容器中。
我不认为这是一个优雅的解决方案
如何解决此问题?
composer
是一个包管理器,与“服务”相反,不作为一个永无止境的过程运行
composer
命令在完成任务后运行一次,执行任务并以状态代码结束(即安装或更新软件包,显示软件包信息等)。如果命令成功运行,则该状态代码为0
,如果命令失败,则该状态代码为非零
结论:
使用状态代码0
激发的容器的消息不是故障指示,而是每个编写器[…]
命令的预期行为
当启动composer
容器时,它会执行容器的默认命令,该命令由Dockerfile
中的CMD
配置,并返回到入口点
,该入口点是composer
可执行文件,没有任何参数
您可以通过运行以下命令来验证此行为:
docker-compose logs composer
composer
只是一个实用工具,因此不应在docker compose.yml
中定义为“服务”。您可以将其留在那里,以便能够运行快速的一次性命令,如:
docker-compose run composer install
。。。但您必须接受命令已退出的通知
一般忠告:
docker compose
不是任务运行程序,也不是为一次性命令设计的。维护人员拒绝了几项实施功能以支持此类功能的建议
示例:
- 使用
docker compose up实现一个选项以跳过某些容器的自动启动参见此
Dockerfile
添加到问题中吗?“已退出,代码为0”通常表示“已成功运行到完成”。@joshbeaurade不起作用。我刚刚tried@DavidMazedockerfile代码列在此代码块的第一行中。如果单独运行docker compose run composer,会发生什么情况?你期望发生什么?有道理。谢谢你详尽的回答!!您能告诉我如何在php docker容器中运行Composer吗?例如,我需要检查docker容器中composer的版本。我该怎么做?我问你这个问题是因为我需要安装laravel和其他一些软件包,在这个时候,当我尝试运行一个命令时,我得到:“composer not found”