在 docker 中使用包含“,”的 shell 命令编写
Using shell commands containing "," in docker compose
我正在尝试使用 docker-compose 运行 celery 并希望使用 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', ...]
您还可以考虑在构建映像的 Docker 文件中指定此项。 (一般来说,如果可以的话,我认为最好在 Docker 文件中指定 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", "..."]
我正在尝试使用 docker-compose 运行 celery 并希望使用 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', ...]
您还可以考虑在构建映像的 Docker 文件中指定此项。 (一般来说,如果可以的话,我认为最好在 Docker 文件中指定 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", "..."]