You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Celery Beat Docker容器无法连接RabbitMQ容器的问题求助

Celery Beat Docker容器无法连接RabbitMQ容器的问题求助

各位大佬好,我遇到了Celery Beat Docker容器无法连接RabbitMQ消息队列的问题,折腾了好一阵没搞定,来求助大家!

我用Docker Compose部署了整套服务,目前有一个正常运行的RabbitMQ容器,配置如下:

rabbitmq:
  image: rabbitmq:3.11.13-management-alpine
  container_name: 'rabbitmq'
  ports:
    - 5672:5672
    - 15672:15672
  env_file:
    - .env
  volumes:
    - ./data:/var/lib/rabbitmq/mnesia
  networks:
    - rabbitmq_go_net

同时还有一个运行Django+Celery的Python服务集群,其中Celery Beat容器的配置是这样的:

celery-beat:
  build:
    context: .
    dockerfile: ./compose/local/django/Dockerfile
  container_name: 'beat'
  image: beat
  command: ["./wait-for-it.sh", "0.0.0.0:1337", "--", "/start-celerybeat"]
  volumes:
    - .:/app
  env_file:
    - .env
  depends_on:
    - rabbitmq
    - backend
  restart: always

Celery Beat的启动脚本start.sh(由/start-celerybeat调用)内容:

#!/bin/bash

set -o errexit
set -o nounset

rm -f './celerybeat.pid'

celery -A app beat -l INFO

我的app/celery.py配置:

from __future__ import absolute_import
import os
from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')

app = Celery('app')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()#(lambda: settings.INSTALLED_APPS)

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # 定时任务配置暂省略
    pass

app/settings.py里的相关配置片段:

INSTALLED_APPS = [
    # 其他APP省略
    'django_celery_results',
    'django_celery_beat',
    # 其他APP省略
]

CELERY_BROKER_URL = CONFIG.get('CELERY_BROKER_URL')
CELERY_RESULT_BACKEND = CONFIG.get('CELERY_RESULT_BACKEND')
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"

.env文件的内容:

RABBITMQ_USER=user
RABBITMQ_PASSWORD=password
RABBITMQ_PORT=5672
RABBITMQ_HOST=rabbitmq
CELERY_BROKER_URL=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@localhost:${RABBITMQ_PORT}/${RABBITMQ_HOST}
CELERY_RESULT_BACKEND=amqp://

现在启动Docker Compose后,Celery Beat容器一直报连接拒绝的错误:

beat         | [2024-02-20 15:19:54,198: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 6.0 seconds...
beat         | [2024-02-20 15:20:00,212: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 8.0 seconds...
beat         | [2024-02-20 15:20:08,223: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 10.0 seconds...
beat         | [2024-02-20 15:20:18,235: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 12.0 seconds...
beat         | [2024-02-20 15:20:30,248: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 14.0 seconds...
beat         | [2024-02-20 15:20:44,265: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 16.0 seconds...
beat         | [2024-02-20 15:21:00,283: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 18.0 seconds...
beat         | [2024-02-20 15:21:18,307: ERROR/MainProcess] beat: Connection error: [Errno 111] Connection refused. Trying again in 20.0 seconds...

我已经确认RabbitMQ容器正常启动,端口映射也没问题,但就是连不上。如果需要更多细节,比如完整日志或其他配置文件,随时告诉我!

备注:内容来源于stack exchange,提问作者fullstacknoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:54:52