建议直接使用WSL2:
https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl –update –web-download
wsl –set-default-version 2
wsl –import-in-place ubuntu ubuntu.tar –user admin
/etc/wsl.conf
[boot]
systemd=true
[user]
default=username
[boot]
command=service docker start
[network]
hostname = DemoHost
generateHosts = false
generateResolvConf = false
WSL2 服务访问
由于 WSL2 与主机之间是通过私有网络访问,那么外网需要访问 WSL2 中的服务时,需要在主机设置端口转发。 例如需要访问 WSL2 中的 5000 端口时,则需在主机设置:
netsh interface portproxy add v4tov4 listenport=8899 listenaddress=* connectport=8080 connectaddress=127.0.0.1 protocol=tcp
listenport:表示在主机上监听的端口,这里设置为5000,也可设置为其他端口;
listenaddress: 表示可访问监听端口的 IP 地址范围, * 表示任意地址;
connectport:表示转发至 WSL2 的端口;
connectaddress:表示 WSL2 的地址;
CAUTION
需要注意的是:
WSL2 中的服务需监听 0.0.0.0 地址段,而不能是 localhost;
主机防火墙需设置规则,允许监听端口,否则主机外网无法访问。
TIP
另外,每次重启电脑后,WSL2 的 IP 地址会改变,笨办法就是重新再设置一次,无需删除原有规则,直接可覆盖;当然,也可以长期不重启电脑;其它网上也有很多办法,比如动态设置域名访问 WSL2 等,可自行参考。
查看端口转发命令:
netsh interface portproxy show all
删除端口转发命令:
netsh interface portproxy delete v4tov4 listenport=8899 listenaddress=*