参考文章: wsl2, hyper-v, reserved ports
问题描述
node环境,当运行npm run dev时提示端口8080被占用。
当执行netstat -ano | findstr 8080
找不到占用端口的进程。
- 可能的原因:
windows系统的hyper-v -> 端口的 reservation/exclusion机制。 - 排查:
进入管理者模式
执行 netsh int ipv4 show excludedportrange protocol=tcp
输出如下:
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
7967 8066
8067 8166
8293 8392
8520 8619
8620 8719
8720 8819
8820 8919
8955 9054
50000 50059 *
* - Administered port exclusions.
破案,8080夹在8067和8166之间。
解决步骤
无需关闭虚拟化,按照以下步骤:
- 执行
netsh int ipv4 set dynamic tcp start=51001 num=5000
- 禁用HNS端口exclusion行为:
reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
- 重启电脑
结果
重启之后,重新运行netsh int ipv4 show excludedportrange protocol=tcp
,得到空列表,说明更改生效。
程序再次监听8080端口,正常