猿问

Docker 容器中的 Celery:错误/MainProcess 消费者:无法连接到 redis

对此感到很沮丧,几天来一直试图让它发挥作用。我请求帮助。


这是一个包含 Postgres、Celery 和 Docker 的 Django 项目。首先我尝试使用RabbitMQ,出现了与现在Redis相同的错误,然后我多次尝试后换成redis,错误仍然相同,所以我认为问题出在Celery上,而不是RabbitMQ/Redis上。


Dockerfile:


FROM python:3.8.5-alpine


ENV PYTHONUNBUFFERED 1


RUN apk update \

    # psycopg2 dependencies

    && apk add --virtual build-deps gcc python3-dev musl-dev \

    && apk add postgresql-dev \

    # Pillow dependencies

    && apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \

    # Translation dependencies

    && apk add gettext \

    # CFFI dependencies

    && apk add libffi-dev py-cffi \

    && apk add --no-cache openssl-dev libffi-dev \

    && apk add --no-cache --virtual .pynacl_deps build-base python3-dev libffi-dev


RUN mkdir /app

WORKDIR /app

COPY requirements.txt /app/

RUN pip install -r requirements.txt

COPY . /app/

docker-compose.yml:


version: '3'


volumes:

  local_postgres_data: {}


services:

  postgres:

    image: postgres

    environment:

      - POSTGRES_DB=postgres

      - POSTGRES_USER=postgres

      - POSTGRES_PASSWORD=postgres

    volumes:

      - local_postgres_data:/var/lib/postgresql/data

    env_file:

      - ./.envs/.postgres


  django: &django

    build: .

    command: python manage.py runserver 0.0.0.0:8000

    volumes:

      - .:/app/

    ports:

      - "8000:8000"

    depends_on:

      - postgres


  redis:

    image: redis:6.0.8


  celeryworker:

    <<: *django

    image: pyrty_celeryworker

    depends_on:

      - redis

      - postgres

    ports: []

    command: celery -A pyrty worker -l INFO


  celerybeat:

    <<: *django

    image: pyrty_celerybeat

    depends_on:

      - redis

      - postgres

    ports: []

    command: celery -A pyrty beat -l INFO


斯蒂芬大帝
浏览 237回答 1
1回答

慕码人2483693

尝试更新您的应用程序设置以使用 redis 主机名而redis不是127.0.0.1# Celery confCELERY_BROKER_URL = 'redis://redis:6379/0'CELERY_RESULT_BACKEND = 'redis://redis:6379/0'参考:每个容器现在可以查找主机名 web 或 db 并获取适当容器的 IP 地址。例如,Web 的应用程序代码可以连接到 URL postgres://db:5432 并开始使用 Postgres 数据库。
随时随地看视频慕课网APP

相关分类

Python
我要回答