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

Docker容器部署Redis集群时CLUSTER MEET失败问题求助

解决MacOS Docker部署Redis集群的节点通信与外部访问问题

问题根源

核心矛盾在于Redis集群的节点间通信依赖集群总线端口(如17001-17003),同时外部服务(如Redisson)需要访问集群的业务端口:

  • 用本机内网IP/host.docker.internal启动节点时,容器间通过该IP访问总线端口可能被MacOS防火墙或Docker端口转发规则拦截,导致CLUSTER MEET超时。
  • 用Docker内网IP创建集群时,集群节点会向客户端返回内部IP,而本机无法直接访问Docker内网网段,导致Redisson连接失败。

方案一:统一用本机内网IP部署(推荐)

此方案让容器间和外部服务都使用本机内网IP通信,无需额外配置客户端。

1. 修改容器启动命令

将--cluster-announce-ip设为你的本机内网IP(如192.168.2.11),确保所有节点参数对应更新:

# 启动redis-7001
docker run -d --rm \
  --name redis-7001 \
  -e ALLOW_EMPTY_PASSWORD=yes \
  --net redis-cluster \
  -p 7001:6379 -p 17001:17001 \
  -v ~/LuckyrhinoStudios/docker/redis_cluster/7001:/data redis \
  redis-server --port 6379 \
  --cluster-enabled yes \
  --cluster-config-file /data/nodes.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --protected-mode no \
  --bind 0.0.0.0 \
  --cluster-announce-ip 192.168.2.11 \
  --cluster-announce-port 7001 \
  --cluster-announce-bus-port 17001

# 同理启动redis-7002、redis-7003,替换端口、目录和容器名

2. 创建集群

直接使用本机内网IP执行集群创建命令:

docker exec -it redis-7001 redis-cli --cluster create \
  192.168.2.11:7001 192.168.2.11:7002 192.168.2.11:7003 \
  --cluster-replicas 0 --verbose

3. Redisson配置

直接用本机内网IP+映射端口配置即可:

clusterServersConfig:
  nodeAddresses:
    - "redis://192.168.2.11:7001"
    - "redis://192.168.2.11:7002"
    - "redis://192.168.2.11:7003"

方案二:Docker内网IP集群+Redisson强制自定义端口

如果必须用Docker内网IP创建集群,可通过Redisson配置强制使用外部映射端口。

1. 启动容器(用Docker内网IP)

指定容器的Docker内网IP,集群宣告信息用内部IP和端口:

# 先创建带子网的Docker网络(可选,方便固定IP)
docker network create --subnet=172.18.0.0/16 redis-cluster

# 启动redis-7001
docker run -d --rm \
  --name redis-7001 \
  --net redis-cluster \
  --ip 172.18.0.2 \
  -e ALLOW_EMPTY_PASSWORD=yes \
  -p 7001:6379 -p 17001:17001 \
  -v ~/LuckyrhinoStudios/docker/redis_cluster/7001:/data redis \
  redis-server --port 6379 \
  --cluster-enabled yes \
  --cluster-config-file /data/nodes.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --protected-mode no \
  --bind 0.0.0.0 \
  --cluster-announce-ip 172.18.0.2 \
  --cluster-announce-port 6379 \
  --cluster-announce-bus-port 17001

# 同理启动redis-7002、redis-7003,替换IP、端口和容器名

2. 创建集群

用Docker内网IP或容器别名执行创建命令:

docker exec -it redis-7001 redis-cli --cluster create \
  172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 \
  --cluster-replicas 0 --verbose

3. Redisson关键配置

添加useClusterHostPort: true参数,强制Redisson使用你配置的外部端口,忽略集群返回的内部端口:

clusterServersConfig:
  nodeAddresses:
    - "redis://192.168.2.11:7001"
    - "redis://192.168.2.11:7002"
    - "redis://192.168.2.11:7003"
  useClusterHostPort: true  # 核心:禁用集群节点返回的端口,使用自定义端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:17:08