在 WSL2 和 Windows 之间转发端口后出现"address already in use"错误



netsh interface portproxy的端口转发以某种方式阻塞了WSL2上的进程需要使用的端口。

为了在WSL2和Windows 11之间进行端口转发,我从这个博客中运行了一个PowerShell脚本。

然而,当我启动一些应该绑定端口的应用程序时,它显示"已在使用的地址";错误。

docker-compose service (MongoDB)错误:

ERROR: for service_name_1  Cannot start service mongo: driver failed programming external connectivity on endpoint service_name_1: Error starting userland proxy: listen tcp4 0.0.0.0:27017: bind: address already in use

FastAPI错误:

[Errno 98] Address already in use

奇怪的是,当这些端口上没有WSL进程时,这些错误就会发生。在WSL中运行这些命令一无所获:

lsof -i :27017
sudo netstat -nlp | grep 27017
但是,有一个Windows进程(svchost)正在使用端口:
PS > Get-NetTCPConnection -LocalPort 27017
LocalAddress                        LocalPort RemoteAddress                       RemotePort State       AppliedSetting OwningProces
                                                  s
------------                        --------- -------------                       ---------- -----       -------------- ------------
0.0.0.0                             27017     0.0.0.0                             0          Listen                     12732
PS > Get-Process -Id 12732
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
401      45     2824      11268       0.05  12732   0 svchost

当我终止这个进程时,地址已经被使用了。错误不再出现,但端口转发仍然不能正常工作。直到今天它们都工作得很好,我不知道是什么地方出了问题。

谢谢你的帮助!

我在最新的WSL版本中遇到了同样的问题!

对我来说有效的是升级到WSL的预览版本,修复了这个问题。https://github.com/microsoft/WSL/releases/tag/1.2.1

安装预览版msixbundle后,可以正常工作:)

谢谢。我可以确认运行wsl --update --pre-release(见这里)解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新