Redis Cluster + Docker + --net=host在 WSL2 下是一个“看起来能跑,实际上必失败”的组合

一、结论

Windows + WSL2 + Docker(Linux 容器)的场景,

因此:

--net=host 绑定的是 WSL2 的 Linux 网络栈,而不是 Windows 主机的 172.18.53.x

这就是为什么:

  • Redis 日志显示:Ready to accept connections

  • 但:ss -lntp | grep 7000

    没有任何输出

  • Windows 上:telnet 172.18.53.x 7000 → 失败

👉 这是 WSL2 网络模型导致的"必然结果",不是 Redis 配置错误。


二、关键证据(你已经无意中暴露了)

这一行信息非常关键:

复制代码

root@DESKTOP-6OOV0C7:/data/redis/cluster#

DESKTOP-xxxx = Windows 主机名

这说明:

  • Redis 实际运行在 WSL2 Linux 虚拟机

  • Docker 的 --net=host

    • 只对 WSL2 内部的 Linux 网络生效

    • 不会绑定 Windows 的物理网卡 IP


三、WSL2 网络模型(这是问题根源)

WSL2 是什么?

一个轻量级虚拟机

网络关系是:

Windows (172.18.53.x)

↑ NAT

WSL2 Linux (172.30.x.x)

Docker container (--net=host)

所以:

以为的 实际发生的
Redis 监听 172.18.53.x Redis 监听 WSL2 的 IP
host 网络 = Windows host host 网络 = WSL2 VM
Windows 可直连 Windows 不能直连

四、为什么 ss -lntp | grep 7000 没输出?

Redis 日志里这行:

* Running mode=cluster, port=7000. * Ready to accept connections

说明:

  • Redis 确实启动了

  • 但它监听的是 WSL2 的某个 IP

  • 而你执行 ss 的环境 不是 Redis 实际监听的网络命名空间

在 WSL2 中,Redis 很可能监听的是:

127.0.0.1:7000 或 172.30.x.x:7000

但你尝试连接的是:

172.18.53.x (Windows IP)

两个世界


五、为什么这件事在 WSL2 下"无解"

❌ 在 WSL2 中,你无法做到:

  • Docker --net=host

  • Redis Cluster

  • Windows 直接通过物理 IP 访问

  • 并且地址还能正确 announce

这四个条件不能同时成立。

Redis Cluster 的前提是:

客户端和节点在同一套地址体系中

WSL2 + Windows 天生违背这个前提。


六、可行的解决方案(按现实可用性排序)

✅ 方案一(强烈推荐,生产级):不用 WSL2

如果你是认真要跑 Redis Cluster(尤其给 Spring Boot 用):

  • 纯 Linux 物理机 / 云服务器

  • Linux 虚拟机

  • Docker + --net=host

👉 这是 唯一与 Redis Cluster 设计完全一致的方式


七、为什么"配置全对但还是不通"

因为:

Redis Cluster 的"网络假设" vs WSL2 的"虚拟化网络"冲突

这不是配置细节问题,是架构层面的不兼容

相关推荐
艾伦_耶格宇1 小时前
【DOCKER容器实战】-2MySQL
运维·docker·容器
2602_959960922 小时前
电商大厂Java面试实录:Spring Boot/JVM/Redis/Kafka/微服务/安全/测试全解析
java·jvm·spring boot·redis·面试题
禅口魔心2 小时前
RK3576开发——Docker部署
docker·嵌入式linux
小的~~3 小时前
面试被问懵了?为什么 Redis 单线程还能保证 Lua 脚本原子性,却偏偏选了 Lua?
redis·面试·lua
随便做点啥3 小时前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
To_OC11 小时前
跑了3个Docker容器后,我终于搞懂镜像和容器到底啥关系
后端·docker·容器
tryCbest15 小时前
Docker 从零到精通:知识与跨平台使用指南
docker·容器
开始学AI17 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器
做前端的娜娜子18 小时前
Docker 常用命令全梳理:从镜像拉取到容器编排
docker·容器·掘金·金石计划
m0_5791466520 小时前
关于Docker Desktop导致C盘空间异常占用的排查与根治方案
运维·docker·容器