我想这样做,我可以在下面的代码中运行多个命令:
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
如何执行多个命令?
当前回答
使用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
其他回答
基于Alpine的图像实际上似乎没有安装bash,但您可以使用sh或ash链接到/bin/busybox。
docker-compose.yml示例:
version: "3"
services:
api:
restart: unless-stopped
command: ash -c "flask models init && flask run"
这对我有用:
version: '3.1'
services:
db:
image: postgres
web:
build: .
command:
- /bin/bash
- -c
- |
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
dockercompose尝试在运行命令之前取消对变量的引用,因此如果您希望bash处理变量,则需要通过加倍它们来逃避美元符号。。。
command:
- /bin/bash
- -c
- |
var=$$(echo 'foo')
echo $$var # prints foo
…否则会出现错误:
服务“web”中“命令”选项的插值格式无效:
想好了,使用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
"
最干净?
---
version: "2"
services:
test:
image: alpine
entrypoint: ["/bin/sh","-c"]
command:
- |
echo a
echo b
echo c
要在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