芹菜工人服务忽略经纪人网址

时间:2019-01-21 10:28:37

标签: docker-compose celery

我正试图在我的django应用中使用Celery,并以redis作为代理。

在我的设置文件中,我设置了CELERY_BROKER_URL='redis://redis:6379'CELERY_RESULT_BACKEND='redis://redis:6379' 我的docker-compose文件如下所示

web: 
    build: 
      context: ./web/
      dockerfile: Dockerfile
    image: &web web
    env_file:
      - .env
    command: "gunicorn web.wsgi:application -w 2 -b :4000"
    volumes:
      - ./web/:/web
    expose:
      - "4000"
    depends_on:
      - db
      - redis
      - worker
      - beat

db:
    build:
      context: ./database/
      dockerfile: Dockerfile
    volumes:
      - data:/var/lib/postgresql/data
    env_file:
      - .env
    expose:
      - "5432"

redis:
    build:
      context: ./cache/
      dockerfile: Dockerfile
    expose:
      - "6379"

worker:
    build:
      context: ./web/
      dockerfile: Dockerfile
    image: *web
    command: "celery -A web worker -l debug"
    ports: []
    depends_on:
      - redis
      - db

beat:
    build:
      context: ./web/
      dockerfile: Dockerfile
    image: *web
    command: "celery -A web beat -l info"
    ports: []
    depends_on:
      - redis
      - db

当我运行docker-compose up时,beat服务可以正常启动,但worker却因错误而失败

  

消费者:无法连接到amqp:// guest:**@127.0.0.1:5672 //:[Errno 111]连接被拒绝

以某种方式,worker服务试图将rabbitmq用作经纪人

请有人帮我弄清楚我在做什么错。

1 个答案:

答案 0 :(得分:0)

我自己修好了。

我们需要按如下所示替换设置文件中的 CELERY_BROKER_URL

# Celery
CELERY_BROKER_URL = 'redis://broker/0'

以上,代理在docker-compose.yml中引用服务的名称。

以前是这样的

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

我的docker-compose.yml文件如下

#.... other services here 
broker:
    image: redis:alpine
    expose: 
        - "6379"
celery:
    build: ./myapp
    command: celery -A myapp worker -l info
    env_file:
        - .env
    volumes:
        - ./myapp:/opt/myapp
    depends_on:
        - broker
        - db