解决Windows未使用端口被占用问题

本文最后更新于:2022年4月28日 中午

参考文章

  1. Hortonworks Docker Sandbox environment cannot start
  2. default-dynamic-port-range-tcpip-chang

问题产生

在无脑跟着网上教材开启Windows的SandBox的时候开启了Hyper-V的功能,结果尝试在6800端口运行和往常一样的Aria2Docker容器的时候出现了端口报错的情况,通过netstat排查也没发现6800端口被占用了,后面发现应该是Windows的动态端口在开了Hyper-V之后被修改了

通过以下指令可以分别查看ipv4/ipv6tcp/udp起始端口

1
2
3
4
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp

在我的情况下,起始端口从原本默认的49152被修改成了从1024开始,因此6800端口无法使用

问题解决

在参考问题中找到了对应的解决方案

如果需要继续使用windows Virtual platform form windows feature(不确定这里是不是指Hyper-V,所以不翻译了)则

  1. 关闭Windows服务上对应的功能,关闭后系统会请求重启

  2. 通过以下指令修改动态起始端口 (49152是Windows默认设置) 在使用adbWSA的调试时,发现默认端口为58526,所以还是用100000

    1
    2
    3
    4
    netsh int ipv4 set dynamicport tcp start=64536 num=1000
    netsh int ipv4 set dynamicport udp start=64536 num=1000
    netsh int ipv6 set dynamicport tcp start=64536 num=1000
    netsh int ipv6 set dynamicport udp start=64536 num=1000
  3. 重新启用对应的功能

如果没有Hyper-V使用需求的情况下,可以尝试直接关闭Hyper-V,然后检查起始端口是否恢复,如果没有恢复的再通过上面的指令手动重新设置起始端口即可