端口显示被占用,netstat -aon | findstr却找不到端口的解决方法
·
一、问题描述
经常在电脑重启之后打开容器 / 启动IDEA / 运行 Spring Boot 应用时,会报某个端口已经被占用,但是在使用netstat -aon | findstr "3306"
时却找不到占用端口的程序,往往在电脑重启之后会解决这个这个问题。
二、原因
本机启用了 Hyper-V 功能,这个功能与 Docker 或者 虚拟机 有关,使用 WSL2
也需要开启这个功能。Widows 默认把某些端口范围分给了 Hyper-V ,成为了保留端口,所以我们无法使用这个端口。并且由于这个端口分配在电脑重启的时会重新随机分配,所以出现了前面 重启几次电脑的解决办法。
1. 查看 Windows 默认的 tcp 动态端口范围
使用命令netsh int ipv4 show dynamicport tcp
就可以查看。这里先借用别人的结果,因为我这边机器已经重新设置了。
> netsh int ipv4 show dynamicport tcp
- 设置之前的结果
这里可以看到默认的 tcp 动态范围为 1024-13977
,并且当我们开启 Hyper-V
之后,系统会默认分配一些端口给 Hyper-V
使用。
2. 查看保留端口范围
使用命令 netsh interface ipv4 show excludedportrange protocol=tcp
就可查看保留端口的范围了。
> netsh interface ipv4 show excludedportrange protocol=tcp
- 设置之前的结果
可以看到 IDEA 运行所需的端口在这个范围内,有时候 3306
这样的端口也会在这个范围中包括,从而不能运行 MySQL。
三、解决问题
使用管理的身份运行 CMD ,设置动态端口的范围,使得这个保留端口的范围避开我们需要的端口范围。
> netsh int ipv4 set dynamicport tcp start=49152 num=16383
> netsh int ipv4 set dynamicport udp start=49152 num=16383
然后重新启动电脑,使用上面的命令检查端口占用:
更多推荐
已为社区贡献6条内容
所有评论(0)