【发布时间】:2019-10-25 03:21:59
【问题描述】:
我想在 docker-compose 中有条件地运行命令
因为当有人第一次运行这个应用程序时,
他们必须运行migrate 命令才能正确运行django 应用程序
但如果他们的 docker 已经运行了migrate,则无需再次运行migrate
所以这是检查他们的 docker 是否已运行 migrate 的命令。
if [[ -z $(python3 zeus/manage.py showmigrations | grep '\[ \]')]]; then
echo 'no need to migrate'
else
echo 'need to migate'
fi
这是我的 docker-compose。
version: '3'
services:
db:
image: postgres
web:
command: >
bash -c "if [[ -z $(python3 zeus/manage.py showmigrations | grep '\[ \]')]]; then
echo 'no need to migrate'
else
echo 'need to migate'
fi && python3 zeus/manage.py runserver 0.0.0.0:8000
"
但是会出现这样的错误
ERROR: Invalid interpolation format for "build" option in service
"web": "bash -c "if [[ -z $(python3 zeus/manage.py showmigrations | grep '\[ \]')]]; then
echo 'no need to migrate' else echo 'need to migate' fi
&& python3 zeus/manage.py runserver 0.0.0.0:8000""
有什么想法吗?
编辑
当我在普通 bash 中运行检查迁移的脚本时,这很好
我认为 docker-compose 无法解析 $(python3 manage.py .....) 部分。
【问题讨论】:
-
添加一个shebang,然后将你的bash脚本粘贴到那里:shellcheck.net
-
当我在 bash 中运行该脚本时,这很好。但是,该错误发生在 docker-compose.yml
-
首先你需要在最后一个
]]之前添加一个sapce
标签: bash docker syntax docker-compose dockerfile