Docker Compose部署下Celery Worker/Beat无法连接RabbitMQ问题
Celery Worker/Beat 无法连接 RabbitMQ(Docker Compose 环境)
我尝试通过Docker Compose整合服务,但Celery Worker与Celery Beat服务无法连接RabbitMQ服务。以下是相关配置与错误信息:
RabbitMQ服务配置(docker-compose.yml)
rabbitmq: container_name: "rabbitmq" image: rabbitmq:3-management ports: - 15672:15672 - 5672:5672 environment: - RABBITMQ_DEFAULT_USER=guest - RABBITMQ_DEFAULT_PASS=guest depends_on: - server volumes: - rabbitmq:/var/lib/rabbitmq
Celery Worker与Celery Beat服务配置(docker-compose.yml)
celery_worker: container_name: celery-worker build: . command: celery -A tasks worker -E --loglevel=INFO environment: host_server: postgresqldb db_server_port: 5432 database_name: db db_username: user db_password: password ssl_mode: prefer networks: - postgresqlnet depends_on: - rabbitmq celery_beat: container_name: celery-beat build: . command: celery -A tasks beat environment: - host_server=postgresqldb - db_server_port=5432 - database_name=db - db_username=user - db_password=password - ssl_mode=prefer networks: - postgresqlnet depends_on: - rabbitmq
celeryconfig.py配置
broker_url = "amqp://guest:guest@localhost:5672//"
错误输出
celery-worker | [2023-02-03 14:24:43,223: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. celery-worker | Trying again in 32.00 seconds... (16/100) celery-worker | celery-beat | [2023-02-03 14:25:10,058: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 32.0 seconds...
解决方法
1. 修正RabbitMQ连接地址
Docker容器内的localhost指向容器自身,而非RabbitMQ容器。Docker Compose中可直接通过服务名作为域名访问其他容器,因此修改celeryconfig.py的broker_url:
broker_url = "amqp://guest:guest@rabbitmq:5672//"
2. 确保所有服务在同一网络
当前Celery服务加入了postgresqlnet网络,但RabbitMQ未配置该网络,导致无法互通。给RabbitMQ服务添加网络配置:
rabbitmq: # ... 保留原有配置 networks: - postgresqlnet
3. 添加RabbitMQ健康检查(可选但推荐)
depends_on仅保证启动顺序,不确保RabbitMQ完全就绪。添加健康检查,让Celery等待RabbitMQ启动完成后再启动:
rabbitmq: # ... 保留原有配置 healthcheck: test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] interval: 30s timeout: 30s retries: 3 celery_worker: # ... 保留原有配置 depends_on: rabbitmq: condition: service_healthy celery_beat: # ... 保留原有配置 depends_on: rabbitmq: condition: service_healthy
内容的提问来源于stack exchange,提问作者redd
相关产品推荐
相关产品推荐

