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

Docker Compose部署Redis集群时一直等待的问题排查

Redis集群Docker Compose部署故障排查

我的环境

  • mac os ventura 13.6.3
  • Docker version 20.10.21

需求

通过Docker Compose部署Redis集群,不依赖额外redis.conf文件,直接用CLI参数传递配置。

当前配置与操作

编写的docker-compose.yml如下:

version: '3'

services:
  redis1:
    image: redis
    ports:
      - "7101:7101"
      - "17101:17101"
    command: redis-server --port 7101 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof

  redis2:
    image: redis
    ports:
      - "7102:7102"
      - "17102:17102"
    command: redis-server --port 7102 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof

  redis3:
    image: redis
    ports:
      - "7103:7103"
      - "17103:17103"
    command: redis-server --port 7103 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof

  redis4:
    image: redis
    ports:
      - "7104:7104"
      - "17104:17104"
    command: redis-server --port 7104 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof

  redis5:
    image: redis
    ports:
      - "7105:7105"
      - "17105:17105"
    command: redis-server --port 7105 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof

  redis6:
    image: redis
    ports:
      - "7106:7106"
      - "17106:17106"
    command: redis-server --port 7106 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof

执行docker compose up -d启动容器后,运行集群创建命令:

redis-cli --cluster create 127.0.0.1:7101 127.0.0.1:7102 127.0.0.1:7103 127.0.0.1:7104 127.0.0.1:7105 127.0.0.1:7106 --cluster-replicas 1

命令执行后卡在Waiting for the cluster to join阶段,无法完成集群搭建。


问题原因

Redis集群节点之间需要通过集群总线端口(默认是服务端口+10000,即你配置的17101-17106)进行通信,同时Docker容器内的Redis节点默认会把容器内部IP注册到集群,但当你用127.0.0.1创建集群时,节点之间无法通过正确的网络地址互相访问,导致集群无法完成握手。

必须给每个Redis节点添加三个关键参数:

  • --cluster-announce-ip: 节点对外宣告的IP(本地部署用127.0.0.1即可)
  • --cluster-announce-port: 节点对外宣告的服务端口(如7101)
  • --cluster-announce-bus-port: 节点对外宣告的集群总线端口(如17101)

另外,为避免容器重启后节点配置冲突,建议给每个节点挂载独立卷保存nodes.conf和AOF文件。


修改后的配置

更新docker-compose.yml如下:

version: '3'

services:
  redis1:
    image: redis
    ports:
      - "7101:7101"
      - "17101:17101"
    volumes:
      - redis1-data:/data
    command: redis-server --port 7101 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7101 --cluster-announce-bus-port 17101

  redis2:
    image: redis
    ports:
      - "7102:7102"
      - "17102:17102"
    volumes:
      - redis2-data:/data
    command: redis-server --port 7102 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7102 --cluster-announce-bus-port 17102

  redis3:
    image: redis
    ports:
      - "7103:7103"
      - "17103:17103"
    volumes:
      - redis3-data:/data
    command: redis-server --port 7103 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7103 --cluster-announce-bus-port 17103

  redis4:
    image: redis
    ports:
      - "7104:7104"
      - "17104:17104"
    volumes:
      - redis4-data:/data
    command: redis-server --port 7104 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7104 --cluster-announce-bus-port 17104

  redis5:
    image: redis
    ports:
      - "7105:7105"
      - "17105:17105"
    volumes:
      - redis5-data:/data
    command: redis-server --port 7105 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7105 --cluster-announce-bus-port 17105

  redis6:
    image: redis
    ports:
      - "7106:7106"
      - "17106:17106"
    volumes:
      - redis6-data:/data
    command: redis-server --port 7106 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7106 --cluster-announce-bus-port 17106

volumes:
  redis1-data:
  redis2-data:
  redis3-data:
  redis4-data:
  redis5-data:
  redis6-data:

重新部署与验证

  1. 停止并清理原有容器:
docker compose down -v
  1. 启动新容器:
docker compose up -d
  1. 再次执行集群创建命令:
redis-cli --cluster create 127.0.0.1:7101 127.0.0.1:7102 127.0.0.1:7103 127.0.0.1:7104 127.0.0.1:7105 127.0.0.1:7106 --cluster-replicas 1
  1. 验证集群状态:
redis-cli -c -p 7101 cluster info

或者查看节点列表:

redis-cli -c -p 7101 cluster nodes

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:41:05