Node.js容器连接Redis容器报ECONNREFUSED连接被拒绝错误如何解决?
问题根源
容器内部的127.0.0.1指向的是当前容器自身的回环地址,而非宿主机或者其他容器的网络地址,你的Node.js容器内部没有运行Redis服务,所以发起连接后会返回ECONNREFUSED错误。
推荐解决方案(Docker自定义网络)
Docker同一自定义网络下的容器可以通过容器名直接互相通信,配置步骤如下:
- 创建专属桥接网络
docker network create redis-network
- 重启Redis容器,加入该网络
# 先停止删除原有Redis容器(如果需要保留数据可以用docker network connect命令直接把现有容器加入网络) docker stop redis && docker rm redis # 启动新的Redis容器加入网络 docker run -d --name redis --network redis-network -p 6379:6379 redis
- 修改Node.js代码中的Redis连接配置
const redis = require('redis') const redisClient = redis.createClient({ host: "redis", // 此处填写Redis容器的名称,Docker会自动完成DNS解析 port: "6379" })
- 启动Node.js容器时加入同一网络
docker run -d --name node-app --network redis-network 你打包的Node.js镜像名称
临时测试方案
如果不需要长期部署,只想快速验证功能,也可以直接将Node.js代码中Redis连接的host改为宿主机的局域网IP(例如192.168.3.12之类的本地IP,不要填127.0.0.1),保持原有的Redis容器启动配置即可正常连接。
内容的提问来源于stack exchange,提问作者nagaraj
相关产品推荐
相关产品推荐

