Windows Docker搭建Redis集群绑定IP报错及外部应用无法访问问题
问题核心原因
- Docker for Windows 不支持
network_mode: "host"配置,该网络驱动仅适配Linux环境,你配置的host模式完全未生效,容器端口没有直接绑定到Windows宿主机的网络栈上,因此外部无法访问。 - 你尝试将redis.conf的bind参数改为宿主机IP
192.168.3.205报错,是因为该IP属于Windows宿主机,容器内部的网络栈不存在这个IP,Redis无法绑定一个不存在的本地IP,因此抛出地址无法分配的错误。
修复方案
第一步:修改docker-compose.yml配置
删除所有服务下的 network_mode: "host" 配置,为每个节点添加端口映射,除了Redis服务端口,还需要映射Redis集群总线端口(规则为服务端口+10000),示例(以6383节点为例):
redis4: container_name: node-4 image: mnadeem/redis ports: - 6383:6383 - 16383:16383 volumes: - C:\docker\redis\6383\redis.conf:/usr/local/etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/redis/redis.conf"] build: context: . dockerfile: Dockerfile hostname: node-4 restart: always
注意:建议将Redis配置文件从C:\Windows\System32目录移出,该目录权限限制严格,容易出现配置文件加载失败的问题,可改为C:\docker\redis这类自定义目录。
第二步:修改每个节点的redis.conf配置
保持bind 0.0.0.0不变,新增集群宣告参数,告诉外部客户端访问集群时使用的宿主机IP和端口,以6383节点为例:
port 6383 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes # 新增以下3行配置 cluster-announce-ip 192.168.3.205 cluster-announce-port 6383 cluster-announce-bus-port 16383
其余节点对应修改端口号即可。
第三步:重建Redis集群
删除之前的集群节点数据,重新启动所有容器后,使用宿主机IP+端口创建集群:
redis-cli --cluster create 192.168.3.205:6379 192.168.3.205:6380 192.168.3.205:6381 192.168.3.205:6382 192.168.3.205:6383 192.168.3.205:6384 --cluster-replicas 1
验证
启动完成后在Windows宿主机执行netstat -ano,确认对应端口已被Docker进程监听,再用telnet测试端口连通性,之后即可用外部客户端正常连接Redis集群。
内容的提问来源于stack exchange,提问作者amin rahmati
相关产品推荐
相关产品推荐

