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

AWS ECS集群中Celery Worker与Redis连接失败问题求助

AWS ECS中Celery Worker无法连接Redis的解决方案

问题定位

你遇到的Error -2 connecting to redis:6379. Name or service not known是DNS解析失败——Celery Worker找不到redis这个主机名对应的服务地址,和Redis本身的端口配置无关。

排查修复步骤

1. 核对ECS网络与服务发现配置

  • 确认Redis和Celery Worker在同一VPC、同一安全组下,安全组要允许双向访问6379端口(入站和出站规则都需开放)。
  • 若使用ECS服务发现:
    • Redis服务必须开启服务发现,且服务名称设为redis(和Celery连接字符串里的主机名完全一致)。
    • 检查Celery Worker所在服务的网络模式,确保能访问服务发现域名(比如awsvpc模式默认支持服务发现解析)。
  • 未使用服务发现的话,直接替换连接字符串里的redis为Redis容器的私有IP,比如redis://172.31.10.5:6379,测试是否能连通。

2. 检查Redis的绑定配置

  • 打开Redis的redis.conf,找到bind参数:
    • 如果是bind 127.0.0.1,只能本地访问,改成bind 0.0.0.0或者直接注释掉,允许外部容器连接。
  • 确认Redis未设置密码(如果有,连接字符串要加上密码:redis://:yourpassword@redis:6379)。
  • 查看Redis容器日志,确认服务正常启动,无报错信息。

3. 测试Worker容器的DNS解析

  • 进入Celery Worker容器内部,执行以下命令:
    nslookup redis
    ping redis
    
    • 如果解析失败:检查ECS集群的DNS设置,确保使用VPC默认DNS(一般是VPC网段的第2个IP,比如172.31.0.2)。
    • 如果能解析但ping不通:检查VPC的网络ACL是否阻断了6379端口的流量。

4. 修正Celery连接字符串

  • 注意错误日志里的连接字符串是redis://redis:6379//,多了一个冗余斜杠,改成redis://redis:6379或者redis://redis:6379/0(指定默认数据库)。

快速验证流程

  1. 先替换连接字符串为Redis私有IP,看是否能连接成功——如果能,说明是DNS解析问题;如果不能,检查Redis绑定和网络规则。
  2. 再排查服务发现或DNS配置,把主机名改回redis。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:25:13