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为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(指定默认数据库)。
快速验证流程
- 先替换连接字符串为Redis私有IP,看是否能连接成功——如果能,说明是DNS解析问题;如果不能,检查Redis绑定和网络规则。
- 再排查服务发现或DNS配置,把主机名改回
redis。
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

