我想这样做,我可以在下面的代码中运行多个命令:
db:
image: postgres
web:
build: .
command: python manage.py migrate
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
如何执行多个命令?
我想这样做,我可以在下面的代码中运行多个命令:
db:
image: postgres
web:
build: .
command: python manage.py migrate
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
如何执行多个命令?
当前回答
使用一个工具,例如等待或码头化。这些是可以包含在应用程序图像中的小型包装脚本。或者编写自己的包装脚本来执行更特定于应用程序的命令。根据:https://docs.docker.com/compose/startup-order/
其他回答
如果您需要运行多个守护进程,Docker文档中建议在非分离模式下使用Supervisord,这样所有子守护进程都将输出到stdout。
从另一个SO问题中,我发现可以将子进程输出重定向到stdout。这样你就能看到所有的输出!
使用bash-c在docker compose文件中运行多个命令。
command: >
bash -c "python manage.py makemigrations
&& python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000"
资料来源:https://intellipaat.com/community/19590/docker-run-multiple-commands-using-docker-compose-at-once?show=19597#a19597
想好了,使用bash-c。
例子:
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
多行中的相同示例:
command: >
bash -c "python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000"
Or:
command: bash -c "
python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000
"
要在Windows容器上运行:
创建.bat文件(使用cmd运行,或者如果容器中有.ps1,则可以使用powershell运行)在命令或入口点中,使用myFile.bat(或myFile.ps1)
贝娄我的码头组合.yml:
version: "3.4"
services:
myservicename:
image: mcr.microsoft.com/dotnet/sdk:6.0
container_name: mycontainername
environment:
- PORT=44390
command: buildAndRun.bat
[...]
我的buildAndRun.bat:
dotnet --list-sdks
dotnet build
dotnet run
基于@Bjorn答案,docker最近引入了特殊的依赖规则,允许您等待“init容器”成功退出
db:
image: postgres
web:
image: app
command: python manage.py runserver 0.0.0.0:8000
depends_on:
db:
migration:
condition: service_completed_successfully
migration:
build: .
image: app
command: python manage.py migrate
depends_on:
- db
我不确定你是否还需要buildkit,但在我这边,它可以与
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose up