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

Docker环境下Node容器无法连接Redis服务故障排查求助

故障根因说明

你遇到的连接故障是Redis 7.0 + Docker Compose部署的典型踩坑点叠加导致的,和触发内存限制后新增的配置修改直接相关:

  • Docker Compose内部DNS解析的是**服务名(service name)**而非容器名(container_name),你最开始写的错误地址redis//redis:6379属于格式错误,修正为redis:6379这一步是对的,但没有解决Redis本身的配置问题
  • Redis 7.0默认开启protected-mode保护模式,即使你配置了bind 0.0.0.0,如果没有配置访问密码、没有显式关闭保护模式,所有来自非127.0.0.1的连接(同Docker网络下其他容器的访问属于这一类)都会被静默拒绝,Redis服务日志只会显示正常启动,不会打印连接拒绝的错误信息
  • 你的compose配置中depends_on字段填的是容器名redis-service,但实际Redis服务的service名是redis,这个配置错误会导致服务启动顺序依赖失效,可能出现应用启动时Redis还没完成初始化的情况
  • 自定义Redis镜像的启动脚本如果没有显式指定你修改后的redis.conf路径,所有配置修改都不会生效,Redis会以默认参数启动
修复步骤
  1. 修正Redis配置文件参数
    找到你自定义Redis镜像中使用的redis.conf文件,确认以下两行配置未被注释,参数值正确:
    bind 0.0.0.0
    protected-mode no
    
    *如果是生产环境部署,不建议直接关闭保护模式,替换为配置requirepass 你的自定义密码,同时把应用的REDIS_URI改成redis://:你的密码@redis:6379即可。
  2. 修正Redis启动脚本
    检查你./docker/redis/目录下的init.sh脚本,确认最后启动Redis服务的命令显式指定了配置文件路径,不要裸启动redis-server,参考写法:
    # 前面写你自己的初始化逻辑,比如目录权限修改、初始化脚本执行等
    # 最后必须用exec加载配置启动Redis,避免配置不生效
    exec redis-server /path/to/your/redis.conf
    
    路径替换为你redis.conf在镜像内的实际存放路径,比如常见路径是/usr/local/etc/redis/redis.conf。
  3. 修正docker-compose.yml配置错误
    把classified-ads服务下的depends_on配置改成正确的服务名,修正后的关键配置段参考:
    services:
      classified-ads:
        container_name: classified-ads
        depends_on:
          - redis # 原来写的redis-service是错误值,必须填服务名
    
  4. 重启服务验证
    执行以下命令重新构建启动服务,避免旧镜像、旧容器缓存导致配置不生效:
    docker compose down
    docker compose up --build -d
    
    启动后先在应用容器内测试连通性:
    # 进入应用容器
    docker exec -it classified-ads sh
    # 测试Redis连接,返回PONG即为连通正常
    redis-cli -h redis ping
    
补充说明

你之前在容器内ping能通redis:6379只能说明ICMP协议网络连通、Docker DNS解析正常,不代表Redis的6379端口接受了连接请求,这是很多人排查Docker网络时容易混淆的点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:33:25