Как запустить celery worker в docker с помощью supervisord?

Здравствуйте!
Пытаюсь запустить два контейнера, в первом работает брокер для celery, во втором будет django, uwsgi, celery.
Вообще хотелсь бы запустить celery в отдельном контейнере, используя официальный образ, непонятно только как будет выглядеть структура такого приложения. Ну да ладно. Пробую запустить дев-сервер джанго и воркер с помощью supervisord. Джанго стартует, supervisor выдает ошибку:
django      | 2016-05-31 14:23:43,685 INFO spawned: 'celery' with pid 28
django      | 2016-05-31 14:23:44,198 INFO exited: celery (exit status 1; not expected)
django      | 2016-05-31 14:23:47,212 INFO spawned: 'celery' with pid 32
django      | 2016-05-31 14:23:47,760 INFO exited: celery (exit status 1; not expected)
django      | 2016-05-31 14:23:48,765 INFO gave up: celery entered FATAL state, too many start retries too quickly

docker-compose.yml
version: '2'

services:
  
  rabbitmq:
    container_name: rabbitmq
    image: rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
    ports:
      - "5672:5672"
      - "15672:15672"

  django:
    container_name: django
    build: ../proj/
    volumes:
      - /home/user/proj
    command: supervisord -c supervisord.conf
    ports:
      - "8000:8000"
    links:
      - rabbitmq
    depends_on:
      - "rabbitmq"


Dockerfile
FROM ubuntu:16.04

RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y python3 python3-pip build-essential python3-dev supervisor

COPY . /home/user/proj
WORKDIR /home/user/proj

RUN pip3 install -r requirements.txt \
 && python3 manage.py collectstatic --no-input \
 && python3 manage.py makemigrations \
 && python3 manage.py migrate


supervisord.conf
[supervisord]
nodaemon=true

[program:django]
command=python3 manage.py runserver 0.0.0.0:8000

[program:celery]
command=celery worker -A proj --loglevel=info


Из логов контейнера видно что rabbitmq стартует позже, несмотря на ключ depends_on. В общем, что делать? Конфиги как только не крутил, ошибка всегда одна и та же.
  • Вопрос задан
  • 2031 просмотр
Пригласить эксперта
Ответы на вопрос 1
Gasoid
@Gasoid
надо сначала проверить в джанге, работает ли реббит, т.е. как у меня в примере, только у меня ждет старта БД, у вас будет ждать старта rabbitmq
https://github.com/Gasoid/docker_django_psql_and_c...

depends_on гарантирует старт контейнера, но это не означает, что процессы стартанут раньше чем в другом контейнере
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы