docker - 在Docker中使用包含 “,”的shell命令

标签 docker docker-compose celery

我正在尝试使用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', ...]

您还可以考虑在构建镜像的Dockerfile中指定此设置。 (通常,我认为最好在Dockerfile中指定CMD;对于Celery worker ,尤其是Celery容器使用与主Django / Flask应用相同的镜像(命令除外)是常见的,因此针对此特定如果这样做,Docker会将裸命令包装在command:中,因此您不需要特殊的YAML转义,或者如果您在命令中指定单个单词,则它必须是有效的带引号的JSON数组。
CMD celery worker --queues=queue1,queue2 ...
CMD ["celery", "worker", "--queues=queue1,queue2", "..."]

关于docker - 在Docker中使用包含 “,”的shell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60755581/

相关文章:

reactjs - create-react-app 服务从 nginx 加载资源时出错

mysql - Flyway 无法从 Docker-Container 连接到 MySQL

GCP 上的 Docker 持久卷

database - 如何防止数据库docker被重建而丢失生产数据

python - 导入错误: No module named control

python - celery 没有运行(权限被拒绝)

python - 如何使用 Celery 实现多处理池

docker - 如何将应用程序打包到能够在 Kubernetes 中的 Spark 集群上运行的 docker 镜像中?

docker - 如何将多个文件复制到 Docker 容器内的特定目录/位置

Docker 构建失败,来自 ubuntu 和 debian repos 的签名失败