我想这样做,我可以在下面的代码中运行多个命令:
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
如何执行多个命令?
当前回答
如果您是第二版,请尝试使用“;”分隔命令例如
命令:“sleep 20;echo'a'”
其他回答
要在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
如果您是第二版,请尝试使用“;”分隔命令例如
命令:“sleep 20;echo'a'”
你可以在这里使用入口点。docker中的entrypoint在命令之前执行,而命令是容器启动时应该运行的默认命令。所以大多数应用程序通常在入口点文件中携带设置过程,最后允许运行命令。
make shell脚本文件可以是docker-entrypoint.sh(名称无关紧要),其中包含以下内容。
#!/bin/bash
python manage.py migrate
exec "$@"
在docker-compose.yml文件中,将其与entrypoint:/docker-entrypoint.sh一起使用,并将命令注册为命令:python manage.py runserver 0.0.0.0:8000注意:不要忘记将docker-entrypoint.sh与代码一起复制。
如果您需要运行多个守护进程,Docker文档中建议在非分离模式下使用Supervisord,这样所有子守护进程都将输出到stdout。
从另一个SO问题中,我发现可以将子进程输出重定向到stdout。这样你就能看到所有的输出!