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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:35