在我的系统 (Windows 10) 上,Windows IP Helper Service (iphlpsvc) 使用端口 9200,默认情况下 Elasticsearch 也使用该端口。显然,我可以将 Elasticsearch 设置为使用其他端口,但这有点烦人,因为 ES 在其他地方都使用 9200。
我想知道是否有任何方法可以配置 iphlpsvc 以使用其他端口?当我在 9200 上启动 ES 后停止 iphlpsvc 并重新启动它时,它似乎没有阻塞任何其他端口(基于Get-NetTCPConnection -OwningProcess 28824
28824 是新的 PID),这让我认为它运行不正常。
我还想知道我是否是唯一一个在 Windows 上遇到 Elasticsearch 和 iphlpsvc 之间冲突的人——我能找到的关于此问题的唯一其他提及是在这里:https://forums.docker.com/t/solved-startup-of-containers-fails-on-local-port-binding/18654
答案1
我刚刚花了相当多的时间来解决类似的问题,希望这能够帮助其他正在努力解决同样问题的人。
Windows IP Helper 服务(位于 svchost 后面)只是一个助手。它不会在开箱时自行绑定或保留任何端口 - 它只会在其他应用程序要求时才开始这样做。在我的情况下,它是 netsh,我已将端口转发设置为 WSL2(就像上面的 @amra 一样),然后就忘记了。这也许也能解决你的问题。
确定 netsh 是否使 IP Helper(iphlpsvc)保留端口(并将其转发到例如 WSL)的方法如下:
在 Powershell 提示符中(以管理员身份运行):
netsh interface portproxy show all
如果您需要的端口(iphlpsvc 阻止的端口)在该列表中,则 netsh 是罪魁祸首(而不是 iphlpsvc)。使用:
netsh interface portproxy delete help
弄清楚如何删除该行。(它需要端口号和监听地址作为参数)。就我而言,以下方法有效:
netsh interface portproxy delete v4tov4 listenport=27117 listenaddress=0.0.0.0
运行此程序后,端口声明消失,我可以保持服务运行+正常启动之前被阻止的应用程序。
如果 iphlpsvc 正在使用“您的端口”,您必须找出哪个其他应用程序告诉 iphlpsvc 这样做。如果有人知道其他可能造成问题的应用程序,请在此处添加它们 :)
答案2
我不知道如何重新配置 Windows IP Helper 服务。更改其监听端口可能是不可能的。
但是,这项服务并非绝对必要。它有效地允许跨各种 Windows 10 网络协议(例如 IPv6 和端口代理等)进行连接。它主要用于运行远程数据库或通过 IPv6 进行连接。
如果您可以忍受没有 IPv6 和其他各种服务,最简单的解决方案就是禁用此服务并停止其运行。
跑步开始 > 服务
向下滚动列表以找到“IP Helper”
双击它并选择属性
要暂时禁用该服务,请选择停止 > 应用 > 确定
要永久禁用该服务,请设置启动类型 从下拉菜单中将其设置为“已禁用”,然后选择应用 > 确定。
重新启动 Windows。