Docker端口转发RST排查:Hyper-V端口冲突
· 阅读需 6 分钟
TL;DR;
- 在 Windows Docker Desktop 中,通过端口转发(如
-p 50022:80)访问容器内 HTTP 服务时,客户端收到大量 RST 包,连接被拒绝。 - 使用 Wireshark 抓包后发现 RST 由宿主机 Windows 发出,且发生在三次握手后立即。
- 诊断脚本
netsh int ipv4 show excludedportrange protocol=tcp发现映射的端口(50022、50023)落在 Hyper‑V 预留的排除范围(50000–50059)内。 - 根本原因是 Windows 的 WinNAT / Hyper‑V 预留了该端口段,Docker 的端口转发进程(docker-proxy)无法成功监听,导致系统返回 RST。
- 解决方案:更换端口至不在排除列表中的端口(如 8080)即可解决。也可通过重启 WinNAT 后立即映射抢占,但不推荐。
