自 Windows 更新 2004 以来,我一直在与许多无法绑定到某些端口的程序和工具作斗争。我偶然发现了一些研究:
netsh interface ipv4 show excludedportrange protocol=tcp
就我而言,它会产生(禁用 hyper-v 后,我切换到基于 WSL2 的 Docker):
Startport Endport
---------- --------
1131 1230
1231 1330
1331 1430
1431 1530
1735 1834
1835 1934
1943 2042
2043 2142
2143 2242
2243 2342
2343 2442
2443 2542
2543 2642
2643 2742
2743 2842
2843 2942
2943 3042
3129 3228
3229 3328
3329 3428
3429 3528
3831 3930
3931 4030
4031 4130
4131 4230
4231 4330
4531 4630
4631 4730
5241 5340
5357 5357
5458 5557
5558 5657
5658 5757
6040 6139
6140 6239
6933 7032
7033 7132
7133 7232
7233 7332
7333 7432
7633 7732
7733 7832
8001 8100
8101 8200
8201 8300
8301 8400
8401 8500
8501 8600
27972 28071
28072 28171
28172 28271
28272 28371
28572 28671
28672 28771
50000 50059 *
目前,从 1431 到 1530 的范围阻止我运行我的 Oracle 数据库。但是每次重新启动后保留的范围都会改变。
我试图删除一些范围,
netsh int ipv4 delete excludedportrange protocol=tcp startport=1431 numberofports=100
但它会产生access denied
(在管理员 cmd 中)。
什么是保留这些范围以及如何控制它们?
我在这个 GitHub 评论中找到了答案:你可以试试
释放港口。这在 Windows 10 2004 中对您有用,在 Windows 10 20H2 中对我有用。
(在早期版本的 Windows 中,我成功使用了以下方法之一,比较How can I know what is prevent my socket to bind to localhost:50060-50959)。
虽然这可能会断开您的网络,但不要绝望。因为,如果上述方法之一对您有用,您可以尝试以下方法来永久解决此问题:
(根据您的需要调整
startport
和numberofports
- 如果需要,请考虑ipv6
)。这应该
net start
在相应的服务以及重新启动后仍然存在,您可以使用如果这输出
你应该会好一阵子。
@yoshpe的回答(与 Hyper-V 相关)是问题的一个潜在原因。
然而,问题对我来说是不同的。就我而言,这是因为 Windows 的“动态端口”配置为从端口 1025 开始并在端口 5000 结束。因此,当 Docker Desktop 启动时,它会保留 1025-5000 端口范围内的端口,这(有时!)与我自己的程序配置为保留/使用的端口冲突。(用于从我的本地 Kubernetes 集群到 localhost 的端口转发)
要查看您的动态端口是否设置不正确,您可以运行:
如果您看到
Start Port: 1025
,则说明动态端口范围配置错误。要修复它,您需要将其设置为更合理的范围——避免使用 <10k 端口。(这通常是开发人员放置自己的应用程序的地方)将其设置为推荐范围:(如果您的问题与 ipv6 有关,则相应地调整命令)
有关更多信息,请参见此处:https ://stackoverflow.com/a/62359555/2441655
它似乎与此处描述的 Hyper-V 问题有关:
我添加了注册表项:
其中清除了大部分保留端口(有很多保留范围,例如 1612-2111、2180-2779 等。)