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

测试Python 2.7 Lambda本地环境时,跨容器执行Redis命令出现redis.exceptions.ConnectionError错误,请求排查原因

问题原因分析

你遇到的连接错误,核心问题在于容器内的localhost指向的是容器自身,而非你关联的redisdb容器。虽然你用--link redisdb:redis参数完成了两个容器的关联,但代码里依然用localhost尝试连接,这就导致my_app容器试图访问自己的6379端口(但你的应用容器本身并没有监听这个端口),最终触发"无法分配地址"的报错。

Docker的--link功能会帮你做两件关键的事:

  • 在my_app容器的/etc/hosts文件中添加一条记录,将别名redis映射到redisdb容器的内部IP
  • 把redisdb容器的相关环境变量注入到my_app容器中

所以你完全不需要依赖localhost,直接用容器别名redis就能正常访问Redis服务。

解决方案

把你的Redis连接代码修改为以下内容即可:

r = redis.Redis(host='redis', port=6379, decode_responses=True)
r.mset({"Bahamas": "Nassau"})
print(r.get("Bahamas"))
验证方法(可选)

你可以进入my_app容器,手动验证Redis连接是否正常:

  1. 进入容器:docker exec -it 76aea9308821 /bin/sh(替换为你的my_app容器ID)
  2. 测试DNS解析:ping redis,如果能收到响应,说明别名解析正常
  3. 测试Redis连接:redis-cli -h redis set test_value 123,再执行get test_value,如果能返回123,说明服务连接正常
额外说明

你启动my_app容器时添加的-p 6379参数,实际是将容器的6379端口映射到了主机的随机端口(从docker ps输出能看到是0.0.0.0:64098->6379/tcp)。这个映射是给主机或外部服务访问用的,容器之间的内部通信完全不需要依赖这个端口映射,直接用容器别名或内部IP即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:24:05