Celery не запускается при запуске на docker с Django, RabbitMQ с docker-compose

У меня есть docker-compose, который содержит следующие компоненты: django, rabbitmq и celery. Однако по какой-то причине сам celery, похоже, не запускается. Когда я использую фронтенд для отправки задания (которое должно передаваться сельдерею), он не запускается.

Это мой файл docker-compose

version: "3.9"
services:
  django:
    build:
      context: .
      args:
        build_env: production
    ports:
      - "8000:8000"
    command: >
      sh -c "python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"

    volumes:
      - .:/code
    links:
      - rabbitmq
      - celery

  rabbitmq:
    container_name: rabbitmq
    restart: always
    image: rabbitmq:3.10-management
    ports:
      - "5672:5672" # specifies port of queue
      - "15672:15672" # specifies port of management plugin

  celery:
    container_name: celery
    restart: always
    build:
      context: .
      args:
        build_env: production
    command:
      - "celery worker -A kraken.celery -l info"
    depends_on:
      - rabbitmq

Dockerfile

ARG PYTHON_VERSION=3.9-slim-buster

# define an alias for the specfic python version used in this file.
FROM python:${PYTHON_VERSION} as python

# Python build stage
FROM python as python-build-stage

ARG build_env

# Install apt packages
RUN apt-get update && apt-get install --no-install-recommends -y \
  # dependencies for building Python packages
  build-essential \
  # psycopg2 dependencies
  libpq-dev

# Requirements are installed here to ensure they will be cached.
COPY ./requirements .

# Create Python Dependency and Sub-Dependency Wheels.
RUN pip wheel --wheel-dir /usr/src/app/wheels  \
  -r ${build_env}.txt


# Python 'run' stage
FROM python as python-run-stage

ARG build_env
ARG APP_HOME=/app

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV BUILD_ENV ${build_env}

WORKDIR ${APP_HOME}

RUN addgroup --system appuser \
    && adduser --system --ingroup appuser appuser

# Install required system dependencies
RUN apt-get update && apt-get install --no-install-recommends -y \
  # psycopg2 dependencies
  libpq-dev \
  # Translations dependencies
  gettext \
  # git for GitPython commands
  git-all \
  # cleaning up unused files
  && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
  && rm -rf /var/lib/apt/lists/*

# All absolute dir copies ignore workdir instruction. All relative dir copies are wrt to the workdir instruction
# copy python dependency wheels from python-build-stage
COPY --from=python-build-stage /usr/src/app/wheels  /wheels/

# use wheels to install python dependencies
RUN pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* \
  && rm -rf /wheels/


COPY --chown=appuser:appuser ./docker_scripts/entrypoint /entrypoint
RUN sed -i 's/\r$//g' /entrypoint
RUN chmod +x /entrypoint


# copy application code to WORKDIR
COPY --chown=appuser:appuser . ${APP_HOME}

# make appuser owner of the WORKDIR directory as well.
RUN chown appuser:appuser ${APP_HOME}
USER appuser

EXPOSE 8000

ENTRYPOINT ["/entrypoint"]

Сельдерей

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.production')
app = Celery('kraken')
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

config.settings

CELERY_BROKER_URL = "amqp://guest:guest@rabbitmq:5672//"
CELERY_RESULT_BACKEND = "rpc://guest:guest@rabbitmq:5672//"
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

Сообщение об ошибке при отправке задания на сельдерей

django_1    | Traceback (most recent call last):
django_1    |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
django_1    |     return self.cursor.execute(sql, params)
django_1    | psycopg2.OperationalError: server closed the connection unexpectedly
django_1    |   This probably means the server terminated abnormally
django_1    |   before or while processing the request.
django_1    | 

и целая цепь последующих ошибок, которые по сути являются

django_1    | django.urls.exceptions.NoReverseMatch: Reverse for 'account_signup' not found. 'account_signup' is not a valid view function or pattern name.

Теперь, если я закомментирую часть rabbitMQ из docker compose, celery действительно загрузится (логотип запуска celery будет выведен на терминал), но, конечно, код все равно не будет работать, поскольку для celery нет очереди сообщений. Код прекрасно работает локально, так что ошибка определенно связана с тем, как я настроил свой docker compose

Вернуться на верх