我正试图在我的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
用作经纪人
请有人帮我弄清楚我在做什么错。
答案 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