修复 WSL2 端口占用问题
发布于2025年4月8日
阅读需 2 分钟
最近在开发璇玑助手,主要开发环境是 win11 的 WSL2。在 时,有时会发现 http://localhost:8000 无法访问。使用 命令查看端口占用情况,发现端口没有被占用。
这个问题重启有时候会解决,但过一阵子又会出现,这就很迷惑了。因为每次出现这个问题时,用 查看端口被哪些程序占用时,都显示没有程序占用。
这个问题只会出现在我 Windows 的设备上,macOS 没有这个问题,初步怀疑是 WSL2 开发环境的问题。
关于 Windows 端口和 Hyper-V:
- Windows 有一个 TCP 动态端口范围,这个范围内的端口会被一些系统服务占用。在 Windows Vista 之前,这个范围是 1025-5000,Windows Vista 之后,这个范围是 49152-65535。
- 如果 Windows 安装了 Hyper-V,Hyper-V 会占用上述范围内的随机端口。
用 查询动态端口占用,发现端口 8000 在动态端口范围内。请注意,动态端口范围内的端口是处于待使用状态,而不是被占用。当前实际被占用的端口可以用命令 查询。
很好,看来动态端口范围被修改了,这个系统已经用了一年多了,一直保持更新,很难再查什么时候被修改了。
让我们直接修改回去吧。
修改后重启,问题解决。
后记
出于系统洁癖,我在两周后重装了 win11 系统,版本为 25 年 3 月 的 24H2,再次执行 命令:
可以看到默认的动态端口范围就已经是 49152-65535 了,端口占用的问题也没有再出现过。
引用
标签:
#WSL2
#Hyper-V