WSL2自定义Docker配置:如何从Windows访问容器端口?
解决方案:无需更换Mac,本地配置实现Windows访问WSL2容器端口
以下是几个无需修改公司Dockerfile的可行方案,按操作复杂度从易到难排序:
方案1:直接使用WSL2的IP地址访问
- 在WSL2终端执行以下命令获取当前WSL2的IP:
hostname -I # 或者更精准的命令 ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1 - 在Windows的MySQL Workbench(或其他工具)中,将数据库主机地址填写为上述获取到的WSL2 IP,端口保持3306即可连接。
- 注意:WSL2重启后IP会自动变更,若嫌麻烦可参考方案2配置自动转发,或给WSL2设置静态IP。
方案2:配置Windows端口转发(手动/自动)
手动配置
- 获取WSL2的IP(同方案1)。
- 以管理员身份打开Windows命令提示符,执行端口转发命令(以3306为例,其他端口同理):
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=<你的WSL2_IP> connectport=3306 - 检查Windows防火墙是否允许这些端口的入站连接,若被拦截,添加对应端口的允许规则。
自动配置(避免重启WSL2后重复操作)
写一个PowerShell脚本,开机自动获取WSL2的IP并更新端口转发规则:
# 获取WSL2的IP $wslIp = wsl hostname -I | Trim() # 清除旧的端口转发规则 netsh interface portproxy delete v4tov4 listenport=3306 netsh interface portproxy delete v4tov4 listenport=5601 netsh interface portproxy delete v4tov4 listenport=9090 netsh interface portproxy delete v4tov4 listenport=9200 # 添加新的转发规则 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=$wslIp connectport=3306 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=5601 connectaddress=$wslIp connectport=5601 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=9090 connectaddress=$wslIp connectport=9090 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=9200 connectaddress=$wslIp connectport=9200
将脚本保存为.ps1文件,设置为开机自动运行即可。
方案3:启用WSL2 localhost转发(适用于Windows 11或新版WSL)
若你的Windows版本为11或安装了较新的WSL版本,可通过配置实现Windows直接用localhost访问WSL2容器端口:
- 在WSL2终端中编辑
/etc/wsl.conf文件(若不存在则创建):sudo nano /etc/wsl.conf - 添加以下配置内容:
[network] generateHosts = true generateResolvConf = true localhostForwarding = true - 保存文件后,在Windows命令提示符中执行
wsl --shutdown关闭WSL,再重新启动WSL。 - 之后在Windows上直接使用
localhost:3306、localhost:5601等地址即可访问对应容器服务。
以上方案均无需修改公司的Dockerfile,仅需在本地完成配置,完全不需要更换Mac设备。
内容的提问来源于stack exchange,提问作者Saul Goodman
相关产品推荐
相关产品推荐

