在Win10系统中,装了Docker desktop,启动容器的时候,突然提示”Permission denied” 了。
之前还正常的,突然某次开机后,就提示映射的端口没有权限,被拒绝了。
输入 netstat -ano | findstr "50000"
查看端口占用信息时,它却无任何输出。端口并没被占用使用。
这是没有权限直接被拒绝了,并不是被占用了。
然后网上查了下。
找到原因:
出现这个错误的原因是 Windows 10 的补丁 KB4074588 中存在一个已知问题:
安装此更新后,应用程序可能无法保留或绑定到以前工作的端口。
这些端口会被 Hyper-V 拿来保留备用,处于备用的端口无法被其他程序使用,用户登录后,系统会随机保留一些端口。使用 netsh interface ipv4 show excludedportrange protocol=tcp 可以查看被保留的端口段,每次重启都有可能是不同的端口。
因此,当你的系统启用 Hyper-V 或安装 Docker(安装 Docker Desktop 会启用 Hyper-V)之后,这个问题可能就会出现。
1.查看被保留的端口段
所以,先用以下命令在Windows PowerShell查看了下被保留的端口段,范围内的端口段被保留了,就无法使用了。
1 | netsh interface ipv4 show excludedportrange protocol=tcp |
2.查看某个端口TCP是否可用
具体查看某个端口是否可用,可以用命令测试:Test-NetConnection localhost -Port <端口号>
当看到结果TcpTestSucceeded : False
,False就不能用了,如果是True就可以用。
1 | # 测试50000端口是否可用 |
解决方法
这个问题的解决方法有两种:
1.最粗暴的方法
直接重启电脑,因为端口会随机改变。多重启几次,总能解决的。
不过以后仍有可能会遇到同样的问题。
2.排除掉需要使用的端口
1).禁用 Hyper-V
2).添加需要排除的端口范围
如:netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
这个命令的作用是添加一个 TCP 端口范围,其中端口从 50051 开始,共计 1 个端口。同时,这个范围中的一个端口将被排除,以确保该端口不会被其他应用程序占用。
netsh:Windows 中的一个命令行工具,用于配置网络参数。
int ipv4:表示要配置 IPv4 网络接口。
add excludedportrange:添加一个被排除的端口范围。
protocol=tcp:指定排除的是 TCP 端口。
startport=50051:指定排除的端口范围的起始端口为 50051。
numberofports=1:指定端口范围中要排除的端口数量为 1。
3).重新启用 Hyper-V
PS.第2种方法也只是重启电脑前可以解决,只要重启电脑了,端口又随机了,还是会有可能再碰到这个问题。所以,我决定,直接就重启电脑算了。
- 本文标题:Win10 Docker启动容器时,端口莫名没权限被拒绝
- 本文作者:HDUZN
- 创建时间:2023-05-10 10:12:45
- 本文链接:http://hduzn.cn/2023/05/10/Win10端口莫名被拒绝问题/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!