Node.js/Docker容器连接Redis失败,同网络仍报ECONNREFUSED错误求助
问题解决办法
核心错误:Redis主机配置错误
你的Node.js代码里把Redis主机设成了redis-net,这是Docker网络的名称,不是Redis容器的主机名。在同一Docker网络中,容器之间通过服务名(即docker-compose.yaml里services下的键名)互相访问,正确的主机名应该是redis。
修改Node.js代码:
const host = 'redis' // 这里改成服务名redis const port = 6379 const redisClient = redis.createClient({port: port, host: host})
额外排查点
- 检查Redis容器状态:执行
docker-compose logs redis,确认日志里出现Ready to accept connections,说明Redis服务正常启动。 - 适配Redis客户端版本:如果使用的是
redis@4.x及以上版本,旧的host/port配置参数已被废弃,需要改用新格式:// 方式1:使用URL const redisClient = redis.createClient({ url: 'redis://redis:6379' }) // 方式2:使用socket配置 const redisClient = redis.createClient({ socket: { host: 'redis', port: 6379 } }) - 确保启动顺序:在docker-compose.yaml的
nodejs服务中添加depends_on,保证Node容器在Redis容器之后启动(注意:仅保证启动顺序,不保证Redis服务完全就绪):nodejs: build: context: ./ container_name: nodejs restart: unless-stopped ports: - "3000:3000" networks: - redis-net depends_on: - redis # 添加这一行
内容的提问来源于stack exchange,提问作者Amon
相关产品推荐
相关产品推荐

