Expo应用无法访问WSL中Docker部署的本地API,Ping与Postman却正常
Expo应用无法访问WSL Docker内的本地API服务器(Network Request Failed)
问题现象
- 本地API服务器部署在WSL的Docker容器中,WSL内的AngularJS客户端、Windows端Postman、常规ping操作均能正常访问该服务器
- WSL环境中运行的Expo应用发起API请求时,持续出现「Network Request Failed」错误
已完成的排查与尝试
- 已将Expo请求中的「localhost」替换为服务器的IPv4地址(
http://172.18.114.140:80/api/),并通过Postman、telnet验证了该IP地址及端口的可达性 - Expo的API请求URI、请求体与Postman完全一致,核心代码如下:
// constants.js export const API_URL = "http://172.18.114.140:80/api/";import { API_URL } from "../util/constants"; // 连接本地后端获取Token async function getToken(username, password) { try { const headers = new Headers(); headers.set('Content-Type', 'multipart/form-data'); const response = await fetch(API_URL + "login/", { method: 'POST', headers: headers, body: { "username": username, "password": password } }); console.log("response 1" ,response); const result = await response.json(); return result; } catch (error) { console.log("getToken: ", error.message) } } // ... const { token: devToken } = await getToken("username", "password") - 对比Postman的请求,仅Postman多了9个自动生成的请求头,判断这不会影响Expo与API的连通性
端口转发遇到的问题
- 尝试通过VS Code进行WSL端口转发,以便Expo应用能正常发起请求,但当前Windows环境下的VS Code端口转发视图没有「Visibility」列,无法将端口设置为公开
- 参考Mac环境的操作经验,推测需要通过GitHub凭证认证才能显示「Visibility」列,但多次尝试触发SSO认证均未成功(包括手动添加端口),而Mac环境下可正常完成认证、修改端口可见性及转发操作
内容的提问来源于stack exchange,提问作者trash_clam
相关产品推荐
相关产品推荐

