Docker环境下Redis连接失败求助:修改REDIS_HOST仍无法解决
解决Docker环境下的Redis连接问题
我来帮你分析下这个问题,两种错误其实对应不同的Docker网络场景,咱们一步步拆解解决:
先搞懂两种错误的根源
- 当
REDIS_HOST=redis时解析失败:Docker容器之间默认只能在同一个自定义网络下通过容器名互相访问。如果你的应用容器和这个名为redis的容器不在同一个网络里,就会出现getaddrinfo failed的域名解析错误。 - 当
REDIS_HOST=127.0.0.1/localhost时连接被拒绝:容器里的127.0.0.1是容器自身的回环地址,不是宿主机的地址。你的应用容器里没有运行Redis,自然会连接失败。
具体解决方案
1. 确认应用容器和目标Redis容器的网络归属
首先得搞清楚你的应用容器和要连接的Redis容器是不是在同一个Docker网络里:
- 查看所有Docker网络:
docker network ls - 查看应用容器所属网络:
docker inspect <你的应用容器ID/名称> | grep -A5 "Networks" - 查看目标Redis容器所属网络(比如你想连的是
redis容器):docker inspect redis | grep -A5 "Networks"
如果两者不在同一个网络,把应用容器连接到Redis所在的网络:
docker network connect <Redis所在的网络名称> <你的应用容器名称>
2. 使用正确的Redis容器名作为REDIS_HOST
从你的docker ps输出看,有4个Redis容器,你需要根据应用的归属选择对应的容器名:
- 如果应用是独立的,要连那个端口映射到宿主机的
redis容器:确保网络互通后,设置REDIS_HOST=redis - 如果应用是
ms-worker服务的一部分:设置REDIS_HOST=ms-worker_redis_1 - 如果应用是
ma系列服务的一部分:对应设置REDIS_HOST=ma-worker-redis-service或REDIS_HOST=ma-redis-service
3. 修改.env后重启应用容器
修改好REDIS_HOST的值后,必须重启应用容器让新的环境变量生效:
docker restart <你的应用容器名称>
额外验证:在应用容器内测试连接
可以进入应用容器直接测试Redis连接,确认网络通畅:
# 进入应用容器的shell docker exec -it <你的应用容器名称> bash # 用redis-cli测试连接(替换成你的Redis容器名) redis-cli -h ms-worker_redis_1 -p 6379 # 如果能进入redis-cli交互界面,说明连接正常
内容的提问来源于stack exchange,提问作者Tien Nguyen




