这是我参与「第五届青训营 」伴学笔记创作活动的第 19 天
前言
本来不想水文章来着,奈何问题送上门了!
想问一下大家,我用windows的wsl+docker部署,用Postman测试WSL的IP地址,接口正常,但是我用手机热点连电脑或者再用电脑热点连手机,使用APP访问,都没反应。不知道为什么[捂脸]有没有大佬能帮下忙[捂脸]我的端口映射和防火墙都检查过了
问题分析
一般这种情况是端口映射错误或者电脑的防火墙没有关闭,拦截了手机的传入链接,一般这种情况我都会检查电脑防火墙和端口映射
解决方法
查看wsl2的ip
-> % ifconfig
开启服务,如nginx
- 确保 wsl2的ip:nginx配置中的端口 可以访问网站
cmd 获取主机ip
C:\WINDOWS\system32>ipconfig
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
手机连上移动热点
手机访问
主机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的端口是"相通"的,完全不需要配置端口转发!