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

如何在Python、Flask、Docker及Docker Compose环境中使用Celery RDB?

解决Docker中Celery RDB无法通过本地Telnet连接的问题

1. 检查端口映射配置

Celery RDB默认使用6900端口,你需要在Docker Compose的Celery服务配置中明确映射该端口到本地。没有端口映射的话,本地机器无法访问容器内的RDB服务。

修改docker-compose.yml中Celery服务的ports项:

services:
  celery:
    # 其他配置...
    ports:
      - "6900:6900"  # 本地端口:容器端口

如果需要调试多个并发任务,RDB会自动使用6901、6902等端口,可一次性映射端口范围:

ports:
  - "6900-6905:6900-6905"

2. 修改Celery RDB绑定地址

默认情况下,Celery RDB绑定到容器内的127.0.0.1,仅允许容器内部访问,外部无法连接。必须将绑定地址改为0.0.0.0,开放外部访问权限。

方式一:代码中指定

在需要调试的Celery任务里,显式设置RDB的host:

from celery.contrib import rdb

@app.task
def debug_task():
    # 业务代码...
    rdb.set_trace(host='0.0.0.0')  # 绑定到所有网卡

方式二:启动Celery时通过参数指定

在Docker Compose的Celery启动命令中添加--rdb-host=0.0.0.0:

services:
  celery:
    command: celery -A your_flask_app.celery worker --loglevel=info --rdb-host=0.0.0.0

3. 验证容器内端口监听状态

启动容器后,执行以下命令检查Celery是否在监听0.0.0.0:6900:

docker exec -it <你的celery容器ID或名称> netstat -tulpn

如果输出中能看到0.0.0.0:6900的监听记录,说明端口绑定正确;如果是127.0.0.1:6900,则需要回到步骤2修改绑定地址。

4. 排查本地防火墙/网络问题

  • 检查本地机器的防火墙是否放行6900端口(或你映射的其他端口),可临时关闭防火墙测试连接。
  • 如果使用Docker Desktop,确保Docker的网络设置正常,未启用特殊的网络隔离规则。

5. 连接测试

完成以上配置后,触发Celery任务,当任务执行到rdb.set_trace()时,Celery日志会输出类似内容:

Remote Debugger:6900: Waiting for client connection...

此时在本地终端执行Telnet命令:

telnet localhost 6900

连接成功后即可进入RDB调试环境,使用n单步执行、c继续运行、p 变量名查看变量等调试命令。

内容的提问来源于stack exchange,提问作者adnan kaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:12:28