Использование команд оболочки, содержащих "," в docker compose - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь запустить сельдерей, используя 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.

1 Ответ

2 голосов
/ 19 марта 2020

Используйте формат черного списка YAML или поместите отдельные слова в кавычки.

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

Вы также можете указать это в Dockerfile, который создает ваш образ. (В общем, я считаю, что лучше указывать CMD в Dockerfile, если вы можете; для работников Celery, в частности, для вашего контейнера Celery обычно используется то же изображение, что и в вашем основном приложении Django / Flask, за исключением команды, так что для этого конкретного случая c вставка command: в docker-compose.yml имеет смысл.) Если вы сделаете это, Docker обернет пустую команду в sh -c, поэтому вам не нужно специальное экранирование YAML, или если вы укажите отдельные слова в команде, это должен быть правильный массив JSON в кавычках.

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