在 docker 撰写中使用包含","的 shell 命令



我正在尝试使用docker-compose运行芹菜,并希望使用docker-compose执行以下命令。

celery worker --app=worker.app --pool=gevent --queues=queue1,queue2 --concurrency=20 -- loglevel=INFO

传统上,我会做这样的

[celery, worker, --app=worker.app, --pool=gevent, --concurrency=20, --queues=queue1, --loglevel=INFO]

使用这种格式时,如何合并用于分隔两个队列名称的"?

我试过

command: >
/bin/sh -c "celery worker --app=worker.app --pool=gevent --queues=queue1,queue2  --concurrency=20 --loglevel=INFO" 

但最终得到一个退出,错误代码为64。

使用YAML块列表格式,或将单个单词放在引号中。

option1:
command:
- celery
- worker
- --queues=queue1,queue2
- ...
option2:
command: [celery, worker, '--queues=queue1,queue2', ...]

您也可以考虑在构建映像的Dockerfile中指定此项。(一般来说,如果可以的话,我认为最好在Dockerfile中指定CMD;特别是对于Celery工作人员,除了命令之外,Celery容器通常使用与Django/Flask主应用程序相同的映像,因此在这种特定情况下,将command:放在docker-compose.yml中是有意义的。(如果你这样做,Docker将在sh -c中包装一个空命令,因此您不需要特殊的YAML转义,或者如果您在命令中指定了单个单词,它必须是一个有效的带引号的JSON数组。

CMD celery worker --queues=queue1,queue2 ...
CMD ["celery", "worker", "--queues=queue1,queue2", "..."]

相关内容

  • 没有找到相关文章

最新更新