Docker Django、redis 和 celery conf

Docker Django, redis and celery conf

我不知道我遗漏了什么部分,但是当我 运行 docker-compose up --build 时 celery 没有连接到 redis 错误:无法连接到 redis://127.0.0.1:6379/0: 错误 111 连接到 127.0.0.1: 6379。连接被拒绝。

这是我的文件docker-compose.yml

version: '3'
    
  services:
    web:
      build: .
      image: resolution
      depends_on:
        - db
        - redis
        - celery
      command: bash -c "python3 /code/manage.py migrate && python3 /code/manage.py initialsetup && python3 /code/manage.py runserver 0.0.0.0:8000"
      volumes:
        - .:/code
      ports:
        - "8000:8000"
      links:
        - db:db
        - redis:redis
        - celery:celery
      restart: always
      environment:
        - POSTGRES_DB=postgres
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
        - PGHOST=trust
        - PGPORT=5432
    db:
      image: postgres:latest
      environment:
        POSTGRES_DB: 'postgres'
        POSTGRES_PASSWORD: 'postgres'
        POSTGRES_USER: 'postgres'
        POSTGRES_HOST: 'trust'
    redis:
      image: "redis:alpine"
      ports:
      - "6379:6379"
      restart: on-failure
    celery:
      image: resolution
      command: celery -A mayan worker -l info
      environment:
        - DJANGO_SETTINGS_MODULE=mayan.settings.production
      volumes:
        - .:/code
      depends_on:
        - db
        - redis
      links:
        - redis:redis
      restart: on-failure

celeryredis 是 运行 在不同的容器中。

根据您分享的错误消息,您的 celery 很可能正在尝试连接到 localhost 以到达 RedisDB,而 不是 在本地主机上。

搜索包含 CELERY_BROKER_URLCELERY_RESULT_BACKEND 值的芹菜配置文件。它们很可能看起来像这样:

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'

它们应该看起来像这样,指向您在撰写文件中定义的 redis 服务名称:

CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'

如果没有这样的配置,直接搜索初始化Celery实例的地方,确保是这样的:

app = Celery('server', broker='redis://redis:6379/0')