以前用的nat模式,通过设置端口转发可以把wsl内部网络端口暴露出去
netsh interface portproxy set v4tov4 listenport=42551 listenaddress=0.0.0.0 connectport=42551 connectaddress=(wsl的ip)
后面根据微软wsl文档所说,网络配置为镜像模式后是局域网是可以直接访问wsl的, 所以我改成了镜像模式
折腾
用户文件夹下新增.wslconfig文件,内容
[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
重启wsl, 然后发现docker 容器暴露的端口 通过telnet ip死活不通;但是telnet 127.0.0.1 port 是通的,百思不得其解,关闭防火墙,hyperv防火墙添加规则,添加端口转发规则,统统都不行;但是我看文档说镜像模式不是可以解决lan访问wsl的问题吗;
折腾了一下午,终于发现原因,文档说的没错,lan是可以直接访问wsl的,只是本机只能通过127.0.0.1访问wsl,是没法通过局域网ip访问的; 我在局域网另一个计器上telnet 本机ip,发现果然可以,打开浏览器也直接可以访问wsl docker容器里的网站。
资料:
https://learn.microsoft.com/en-us/windows/wsl/networking#mirrored-mode-networking
https://github.com/microsoft/WSL/issues/10494#issuecomment-1726758663
https://zhuanlan.zhihu.com/p/593263088
Q.E.D.