如何在docker compose中有条件地运行命令

问题描述 投票:0回答:1

我想在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 .....)部分。

bash docker syntax docker-compose dockerfile
1个回答
0
投票

尝试一下:

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"

那里有三个问题,您需要转义转义符\,并添加更多的$以逃避替换的替换,并在最后一个]]之前添加一个空格

© www.soinside.com 2019 - 2024. All rights reserved.