Docker容器环境下Bull Queue连接Redis失败问题求助
解决方案:Bull Worker容器无法连接Redis容器(ECONNREFUSED 127.0.0.1:6379)
问题核心
你的Worker容器始终尝试连接127.0.0.1:6379,说明代码里的Redis配置未生效,大概率是镜像缓存未更新或配置格式错误导致的。
1. 清理Docker构建缓存,重新构建Worker镜像
修改代码后直接执行docker-compose up会复用旧的构建缓存,容器运行的仍是未更新配置的代码。执行以下命令强制重新构建:
docker-compose build --no-cache worker docker-compose up -d
2. 修正环境变量格式与代码配置
你设置的REDIS_HOST=local:redis:6379格式错误,Bull的redis.host仅需填写服务名redis,端口可单独指定(默认6379可省略)。
更新Docker Compose配置:
worker: image: worker build: ../worker environment: - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=pirate ports: - "6000:6000" # 移除links,Compose v3默认网络已支持通过服务名访问
更新queue.ts代码:
import Bull from "bull"; // 打印配置用于调试 const redisConfig = { host: process.env.REDIS_HOST || "redis", port: parseInt(process.env.REDIS_PORT || "6379"), password: process.env.REDIS_PASSWORD || "pirate", }; console.log("当前Redis配置:", redisConfig); export const gameEventQueue = new Bull("game-event", { redis: redisConfig });
启动后查看Worker容器日志,确认打印的Redis配置是否正确。
3. 验证容器间网络连通性
进入Worker容器,测试能否访问Redis服务:
# 替换为你的Worker容器名 docker exec -it worker sh # 测试ping通redis服务 ping redis # 测试Redis连接 redis-cli -h redis -p 6379 -a pirate ping
如果ping redis失败,说明Docker网络配置异常,可手动指定自定义网络:
version: '3.1' networks: app-network: driver: bridge services: redis: ... networks: - app-network worker: ... networks: - app-network
4. 排查是否有其他配置覆盖
检查项目中是否存在.env文件或其他配置模块,可能覆盖了当前的Redis配置。确保所有配置文件都更新为正确的Redis主机地址。
内容的提问来源于stack exchange,提问作者catfish
相关产品推荐
相关产品推荐

