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

IORedis连接被拒绝:带密码认证的Redis配置故障排查

问题:开启Redis密码认证后IORedis连接被拒绝

我正在开发一个后端Demo项目,用Docker整合MongoDB、Redis和Express服务。原本所有功能正常,但给Redis设置密码认证后,IORedis无法连接Redis服务器,报错connect ECONNREFUSED <ip>。

以下是我的配置和代码:

docker-compose.yml配置

version: '3.8'
volumes:
  portfolio-data:
  portfolio-cache:
services:
  database:
    image: mongo
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=$MONGODB_ROOT_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD
    volumes:
      - portfolio-data:/data/db
    ports:
      - 27017:27017
  redis:
    image: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - ./config/redis.conf:/etc/redis/redis.conf
      - portfolio-cache:/data
    command: ["redis-server", "/etc/redis/redis.conf"]
  portfolio-api:
    image: portfolio-api
    depends_on:
      - database
      - redis
    env_file: ./.env
    environment:
      - API_PORT=8000
      - DB_HOST=$MONGO_HOST
      - DB_PORT=27017
      - DB_USER=$MONGO_USER
      - DB_PASSWORD=$MONGO_PASSWORD
      - REDIS_HOST=$REDIS_HOST
      - REDIS_PASSWORD=$REDIS_PASSWORD
      - REDIS_PORT=6379
      - REDIS_SECRET=$REDIS_SECRET
    volumes:
      - .:/app
    ports:
      - 8000:8000

IORedis连接代码

const redis = new Redis({
  host: redisConfig.host,
  port: redisConfig.port,
  password: redisConfig.password
});

redis.on('error', (err: Error) => {
  backendLogger.error(err.message);
});

redis.on('connect', () => {
  backendLogger.info('Connected successfully to redis');
});

错误日志

2022-09-28T06:46:29.707Z error:  connect ECONNREFUSED <ip>

补充说明:我可以通过Redis客户端用密码正常连接Redis;不使用自定义配置文件时,IORedis能正常连接。


解决方案

  • 检查redis.conf的bind配置
    默认redis.conf中bind 127.0.0.1会限制Redis只监听本地回环地址,Docker内部容器无法访问。需要将其修改为bind 0.0.0.0,允许所有IP地址访问Redis服务。

  • 验证配置文件是否正常加载
    进入Redis容器执行命令,确认密码配置是否生效:

docker exec -it <redis-container-name> redis-cli
127.0.0.1:6379> CONFIG GET requirepass

如果返回""或(nil),说明配置文件未被正确加载,检查挂载路径是否正确,或者启动命令是否指定了正确的配置文件路径。

  • 确认REDIS_HOST的配置值
    在Docker Compose环境中,容器之间通过服务名通信,所以portfolio-api的REDIS_HOST应该设置为redis(即Redis服务的名称),而不是localhost或外部IP。检查.env文件中的REDIS_HOST是否正确。

  • 检查配置文件权限
    挂载的redis.conf文件可能存在权限问题,导致Redis进程无法读取。可以修改本地文件权限为644,或者在docker-compose.yml中为Redis服务添加user: "redis"指令,确保Redis进程有读取配置文件的权限。


内容的提问来源于stack exchange,提问作者theGoerner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:55:19