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

Docker中Redis集群模式下Spring Boot连接异常求助

Docker部署Redis集群连接Spring Boot失败的解决方案

核心问题分析

  • 单机Redis用localhost/127.0.0.1能正常连接,是因为端口直接映射到了宿主机,客户端直接访问宿主机端口即可。但Redis集群模式下,客户端会从初始节点拉取所有集群节点的地址——默认Docker里的Redis节点会返回容器内部IP(比如你遇到的172.30.0.2)和容器内部端口,宿主机或Spring Boot容器根本访问不到这个内部IP,直接导致超时/连接拒绝。
  • 另外,Redis集群必须完成3主3从的初始化才能正常工作,单节点启动集群模式会直接报错连接拒绝。

分步解决

1. 启动Redis集群节点时强制配置对外通告地址

不管用docker run还是docker-compose,每个Redis集群节点必须加上以下配置,告诉集群对外暴露的IP和端口:

# docker run示例,替换成你的宿主机IP和端口
docker run -d \
  --name redis-node-1 \
  --net redis-cluster-net \
  -p 6379:6379 -p 16379:16379 \
  redis:7.2.1 \
  redis-server \
  --cluster-enabled yes \
  --cluster-config-file nodes.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --cluster-announce-ip 192.168.1.100  # 宿主机内网/公网IP,或Spring Boot可访问的IP
  --cluster-announce-port 6379         # 宿主机映射的Redis服务端口
  --cluster-announce-bus-port 16379    # 宿主机映射的集群总线端口(服务端口+10000)
  • 如果Spring Boot也在Docker容器且和Redis同网络,可以把cluster-announce-ip设为容器的固定IP,或者直接用容器名(比如redis-node-1)作为地址。

2. 正确配置Spring Boot的Redis集群参数

把spring.redis.cluster.nodes改成宿主机IP+映射端口,不要用127.0.0.1(除非Spring Boot和Redis都在宿主机本地运行):

spring.redis.cluster.nodes=192.168.1.100:6379,192.168.1.100:6382,192.168.1.100:6383,192.168.1.100:6384,192.168.1.100:6385,192.168.1.100:6386
spring.redis.timeout=3000
spring.redis.cluster.max-redirects=3

3. 完成Redis集群初始化

启动所有6个节点(3主3从)后,必须用redis-cli初始化集群:

redis-cli --cluster create 192.168.1.100:6379 192.168.1.100:6382 192.168.1.100:6383 192.168.1.100:6384 192.168.1.100:6385 192.168.1.100:6386 --cluster-replicas 1

输入yes确认集群创建,完成后才能正常访问。

对应你遇到的两个错误的原因

  1. 连接拒绝(/127.0.0.1:6386):你只启动了一个Redis节点,集群未完成3主3从的初始化,Redis集群模式下单节点无法提供服务,直接拒绝连接。
  2. 连接超时(/172.30.0.2:6384):Redis节点返回了容器内部IP,Spring Boot所在环境(宿主机或自己的容器)无法访问Docker内部的私有IP,核心是没配置cluster-announce-ip参数。

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

相关产品推荐
方舟 Agent Plan

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

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