我想在docker-compose中有条件地运行命令
因为有人第一次运行此应用程序,
他们必须运行migrate
命令,以便他们可以正确运行django
应用程序
但是如果他们的码头工人已经运行migrate
,则无需再次运行migrate
因此这是检查其泊坞窗已运行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 .....)
部分。
尝试一下:
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"
那里有三个问题,您需要转义转义符\
,并添加更多的$
以逃避替换的替换,并在最后一个]]
之前添加一个空格