项目部署在WSL无法用手机访问?| 青训营笔记

717 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 19 天

前言

本来不想水文章来着,奈何问题送上门了!image.png

想问一下大家,我用windows的wsl+docker部署,用Postman测试WSL的IP地址,接口正常,但是我用手机热点连电脑或者再用电脑热点连手机,使用APP访问,都没反应。不知道为什么[捂脸]有没有大佬能帮下忙[捂脸]我的端口映射和防火墙都检查过了

问题分析

一般这种情况是端口映射错误或者电脑的防火墙没有关闭,拦截了手机的传入链接,一般这种情况我都会检查电脑防火墙和端口映射

解决方法

查看wsl2的ip

-> % ifconfig

image.png

开启服务,如nginx

  • 确保 wsl2的ip:nginx配置中的端口 可以访问网站

cmd 获取主机ip

C:\WINDOWS\system32>ipconfig

image.png cmd 管理员权限 映射

netsh interface portproxy add v4tov4 listenaddress=主机ip listenport=来个端口如8080 connectaddress=wsl2的ip connectport=nginx中配置的端口

查看

netsh interface portproxy show all

删除

netsh interface portproxy delete v4tov4 listenaddress=主机ip listenport=8080

防火墙新建端口规则:

  • 防火墙->高级设置->入站规则->新建规则,新建一个端口规则

image.png 电脑打开移动热点 image.png 手机连上移动热点 手机访问 主机ip:8080

避免端口冲突

根据我的观察, 如果Windows本地启动了指定端口, 这时WSL2中虽然可以使用相同的端口, 但是localhost:port 将指向Windows的服务, WSL的服务将会被覆盖!

当然了, 如果我们配置了端口转发, 转发的IP是WSL的地址, 而不是localhost, 那么WSL将会覆盖Windows的服务!

如果我们电脑上有nginx之类的可以开启web服务的一些软件,我们也可以用这些软件来进行转发

如果这些都不行,那么可以考虑使用tracrt来检查一下完整的链路,看看哪一部分出现了问题,根据具体的问题去进行一个相应的解决了

因此在配置时, 特别是web服务, 需要注意!

或者说使用docker

使用容器,来配置web服务,显然是最佳选择,这个时候你就会遇到本文的问题,因为你可能希望让其他主机来访问你的容器服务!

但是,我并不推荐你这么做, 更好的方式是安装docker-desktop, 即Windows版的docker, WSL2会自动连接到Windows的Docker 服务中.

此时启动的容器使用的端口和Windows的端口是"相通"的,完全不需要配置端口转发!