Windows Docker 端口占用错误解决

错误来源

或者

或者

这些都是端口占用的问题,很多时候都是Windows会保留部分tcp端口,这些端口范围内不可用:

可以使用netsh int ipv4 show dynamicport tcp命令查看tcp动态端口范围:

Windows Docker 端口占用错误解决-LMLPHP

使用netsh int ipv4 show excludedportrange protocol=tcp命令查看 tcp 端口排除范围:

Windows Docker 端口占用错误解决-LMLPHP

解决方法

1. 直接重启

一般重启后Hyper-V的端口分配bug会消除,自然问题也会消失,但这不一定,偶尔会出现重启也解决不了的情况

2. 重新分配Hyper-V端口范围

简单地重新设置“TCP 动态端口范围”,以便 Hyper-V 只保留我们设置的范围内的端口。您可以通过以管理员权限运行以下命令将“TCP 动态端口范围”重置为 49152–65535,但如果您认为它太大,也可以将其更改为较小的范围。

请在命令行中执行下列命令设置动态端口范围:

netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384

然后重启电脑。

3. 不重启让Hyper-V重新随机分配端口

来自 StackOverflow 的错误解决方案

net stop winnat
docker start container_name
net start winnat

这命令的实质是简化版的重启电脑,让 Hyper-V 初始化一些随机端口来保留,如果它仍然没有释放你所需要的端口,你可能需要再次操作。也就是因此,该回答下面有些人回复有用,有些人回复没用,就是因为这种解决方式解决问题的概率非常的随机。

参考文献

1:彻底解决docker在windows上的端口绑定问题

2:解决Windows下Docker启动容器时,端口被占用错误 - bkycmd - 博客园

3:docker - Ports are not available: listen tcp 0.0.0.0/50070: bind: An attempt was made to access a socket in a way forbidden by its access permissions - Stack Overflow

4:无法启动容器,提示端口无法使用,却查不到哪个进程占用?_UVE的博客-CSDN博客

如有疑问或错误,欢迎和我私信交流指正。
版权所有,未经授权,请勿转载!
Copyright © 2023 by Mr.Idleman. All rights reserved.

04-25 12:23