慢学 Docker-端口保留问题

问题描述

在 Docker for Windows 中,无论是否启用基于 WSL 2 的引擎,都需要 Hyper-V 服务的支持。最近在使用 Tomcat 调试程序时,提示 “address localhost:1099 is already in use”,想着是什么程序占用了 1099 端口,使用 netstat -ano | findstr 1099 命令查询 1099 端口占用情况,结果为空,说明端口未被具体运行中的程序占用,那么就有可能是 1099 端口被系统保留了。亦尝试更换 tomcat 的 1099 端口为其他端口,结果无异。

经过一番搜索,确定了是按照 Docker 后 Hyper-V 保留了系列端口,而 1099 就在其中。

解决方案

解决方法是释放被保留的端口。

1、首先确定问题,管理员模式执行 cmd 命令,查看系统保留的端口范围:

netsh interface ipv4 show excludedportrange protocol=tcp

查看要使用的端口是否在保留端口范围中,如果在其中,则说明是端口保留问题,可以继续后续操作。

2、暂时停止 Hyper-V 服务,管理员模式执行 CMD 命令:

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

成功关闭 Hyper-V 服务后重启计算机。

3、把所需端口移出排除端口之列,比如解除 1099 端口的保留状态,让他可以为 tomcat 等程序使用,管理员模式执行 CMD 命令:

netsh int ipv4 delete excludedportrange protocol=tcp startport=1099 numberofports=1

4、重新启用 Hyper-V 服务,管理员模式执行 CMD 命令:

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

启用后重启计算机,这样 1099 端口就能继续使用。

备选方案

本文的解决方法是单独将需要使用的端口移出端口保留范围,有另外一个方法是停用 Hyper-V 服务后重新设置 Hyper-V 的端口保留范围,使其不要将我们需要用到的端口囊括其中,详细做法参考:

Unable to bind ports: Docker-for-Windows & Hyper-V excluding but not using important port ranges · Issue #3171 · docker/for-win · GitHub

暂无评论

发送评论 编辑评论


				
上一篇
下一篇