问题
今天早上启项目时候,意外的报端口占用,但是通过命令查询占用的进程却找不到
PS C:\Users\mrdu> netstat -aon|findstr "8000"
PS C:\Users\mrdu>
原因
开启了Hyper-v后,系统保留了很多端口。
通过命令查询hyper-v的端口保留范围。
PS C:\Users\mrdu> netsh interface ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
1104 1203
1304 1403
1404 1503
1504 1603
1704 1803
1804 1903
5357 5357
7605 7704
7805 7904
7905 8004
8005 8104
8205 8304
8308 8407
11731 11830
11831 11930
13878 13977
13978 14077
14198 14297
14298 14397
50000 50059 *
* - 管理的端口排除。
解决方案
可以修改hyper-v的端口保留范围,当然我们还可以关闭hyper-v。由于我需要保留Windows的hyper-v虚拟机启动docker的方式,所以选择修改保留端口的范围。
通过以下命令,修改保留端口的范围。
PS C:\Users\mrdu> netsh int ipv4 set dynamicportrange tcp start=49152 num=16384
确定。
PS C:\Users\mrdu>
再查询一下,看是否修改成功。
PS C:\Users\mrdu> netsh int ipv4 show dynamicport tcp
协议 tcp 动态端口范围
---------------------------------
启动端口 : 49152
端口数 : 16384
这样就是修改成功了,然后重启端口。
PS C:\Users\mrdu> netsh winsock reset
成功地重置 Winsock 目录。
你必须重新启动计算机才能完成重置。
最后重新启动一下系统,再看一下hyper-v保留端口的范围已经被成功修改了,项目也能正常启动了。
PS C:\Users\mrdu> netsh interface ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
5357 5357
49751 49850
49851 49950
50000 50059 *
50060 50159
50160 50259
50260 50359
50360 50459
50460 50559
50560 50659
50834 50933
50934 51033
51034 51133
51134 51233
51234 51333
51334 51433
51434 51533
51534 51633
* - 管理的端口排除。