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
(见这里)解决了这个问题。