an attempt was made to access a socket in a way forbidden by its access permissions
问题:docker desktop for windows 安装以后,需要开启windows的虚拟化hyper-v. 刚开始还使用正常,直到某一次重启电脑后,tomcat 8080 无法使用,利用netstat –ano|findstr “8080”发现根本没被占用,那为什么不能用呢?
原因:hyper-v 将某些端口进行了保留(也就是其他应用程序不能使用这些端口了)
解决
查看被保留的端口
以管理员身份
打开cmd或powershell,运行:
netsh interface ipv4 show excludedportrange protocol=tcp
C:\Users\wangz> netsh interface ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
5357 5357
5700 5700
8040 8139
8140 8239
8240 8339
8340 8439
8440 8539
8640 8739
8740 8839
8884 8884
8966 9065
9350 9449
50000 50059 *
* - 管理的端口排除。
我们发现8080端口其实就在其中,需要临时关闭hyper-v,来调整一下保留端口
关闭hyper-v
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
执行命令后,会提示重启,我们重启计算机
重启后,设置保留端口
重启后,请保留所需端口,以便Hyper-V不会将其保留
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
(可选)添加一个注册表项来防止Windows容器主机网络服务(HNS)保留端口,重启生效
reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
重新启用hyper-v
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
最后测试,8080端口果然可以用了,但是,当我打开IDEA时,报错了,idea的端口占用?
继续在cmd中执行
netsh winsock reset
netsh int ipv4 set dynamicport tcp start=49152 num=16383
netsh int ipv4 set dynamicport udp start=49152 num=16383
好了,再次启动idea, 全部搞定~