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

使用Docker连接Redis服务器时出现getaddrinfo ENOTFOUND错误

问题排查:Docker容器无法连接Redis服务器(DNS解析失败)

错误信息

[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis-stack-server
talawa-api-dev-1      | [0]     at __node_internal_captureLargerStackTrace (node:internal/errors:563:5)
talawa-api-dev-1      | [0]     at __node_internal_ (node:internal/errors:782:10)
talawa-api-dev-1      | [0]     at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
talawa-api-dev-1      | [0]     at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17)

环境:Windows WLS Ubuntu发行版,docker ps显示redis-stack-server容器正常运行,但talawa-api-dev容器无法连接Redis。

用户配置文件

.env 文件

NODE_ENV=development
SERVER_PORT=4000
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

docker-compose.dev.yaml 文件

version: "3.8"

services:
 mongodb:
   image: mongo:latest
   ports:
     - 27017:27017
   volumes:
     - mongodb-data:/data/db
   networks:
     - talawa-network

 redis-stack-server:
   image: redis/redis-stack-server:latest
   ports:
     - 6379:6379
   volumes:
     - redis-data:/data/redis
   networks:
     - talawa-network

 minio:
   image: minio/minio
   ports:
     - "9000:9000"
     - "9001:9001"
   environment:
     - MINIO_ROOT_USER=${MINIO_ROOT_USER}
     - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
   command: server /data --console-address ":9001"
   volumes:
     - minio-data:/data
   networks:
     - talawa-network

 talawa-api-dev:
   build:
     context: .
     dockerfile: Dockerfile.dev
   volumes:
     - .:/usr/src/app
     - /usr/src/app/node_modules
   depends_on:
     - mongodb
     - redis-stack-server
     - minio
   environment:
     - MONGO_DB_URL=mongodb://mongodb:27017
     - REDIS_HOST=redis-stack-server
     - REDIS_PORT=6379

 caddy:
   image: caddy/caddy:2.2.1-alpine
   container_name: caddy-service
   restart: unless-stopped
   ports:
     - "80:80"
     - "443:443"
   volumes:
     - ./Caddyfile:/etc/caddy/Caddyfile
     - ./site:/srv
     - caddy_data:/data
     - caddy_config:/config

volumes:
 mongodb-data:
 redis-data:
 caddy_data:
 caddy_config:
 minio-data:

networks:
 talawa-network:
   driver: bridge

错误原因分析

  1. 网络隔离问题:talawa-api-dev服务未显式加入talawa-network自定义网络,默认会使用Docker默认网络;而redis-stack-server在talawa-network中,两个容器处于不同网络,无法通过服务名(redis-stack-server)进行DNS解析。
  2. 环境变量优先级冲突:.env文件中REDIS_HOST=localhost,如果应用优先读取本地.env而非容器内环境变量,容器内的localhost指向自身,而非Redis容器,导致连接失败。

解决办法

1. 统一容器网络

修改docker-compose.dev.yaml,给talawa-api-dev和caddy服务添加networks配置,确保所有需要通信的服务处于同一自定义网络:

talawa-api-dev:
  # 原有配置不变
  networks:
    - talawa-network

caddy:
  # 原有配置不变
  networks:
    - talawa-network

2. 确保环境变量正确生效

  • 若应用在容器内优先读取容器环境变量:当前docker-compose中已设置REDIS_HOST=redis-stack-server,无需修改.env,但需确认应用代码优先读取容器环境变量而非本地.env(部分框架会优先加载容器环境变量覆盖本地文件)。
  • 若应用强制读取本地.env:修改.env中的REDIS_HOST为redis-stack-server,但注意本地直接运行应用时需改回localhost,建议优先使用容器环境变量覆盖的方式。

3. 验证连通性

修改配置后重启容器:

docker-compose -f docker-compose.dev.yaml down
docker-compose -f docker-compose.dev.yaml up -d

进入talawa-api-dev容器验证DNS解析:

docker exec -it talawa-api-dev-1 ping redis-stack-server

若能正常ping通,说明网络配置生效,Redis连接问题即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:54:52