iOS Simulator(Expo Go)连接本地Docker化API时出现域名解析失败(错误码-1003)的排查求助
iOS Simulator(Expo Go)连接本地Docker化API时出现域名解析失败(错误码-1003)的排查求助
各位技术大佬好!我最近碰到个特别头疼的问题,折腾了好几天都没解决,希望能得到大家的指点:
之前我的React Native + Expo Go项目,用iOS模拟器连接本地Docker里的PHP API已经正常跑了一年多,最近突然开始报错,提示找不到指定主机名。奇怪的是,同团队的其他同事用一模一样的配置完全没问题,我怀疑是macOS或者Xcode更新导致的,但回滚Xcode版本也没效果,也没找到系统安全设置里有异常的地方。
错误详情
模拟器抛出的核心错误日志如下:
Error: Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo={... NSErrorFailingURLURLStringKey=https://loc-api.pfi.local/v3/login, ...}
这明显说明模拟器环境里loc-api.pfi.local这个域名的DNS解析失败了。
我的技术栈
API服务端
- PHP 8.2 编写的API,部署在Docker容器中,使用Traefik作为反向代理
移动端
- React Native + Expo Go
- 配套使用React Native Paper、Redux状态管理
模拟器异常表现
- 模拟器能正常连接外部的预发布/生产环境API,没有任何问题
- 唯独连接
https://loc-api.pfi.local时直接失败 - 本地API服务用其他方式都能正常访问:Mac主机的浏览器、Postman都能正常调用接口,完全无异常
已尝试的排查方案(及结果)
我把能想到的办法都试了一遍,但都没解决问题:
- 防火墙检查:确认macOS系统防火墙已经完全关闭
- API服务可用性验证:Docker里的API确实在运行,Mac主机的浏览器/Postman访问
https://loc-api.pfi.local完全正常;终端执行ping loc-api.pfi.local能正确解析到127.0.0.1,ping包也能正常返回 - 模拟器重置操作:
- 对出问题的模拟器执行了「Erase All Content and Settings...」
- 删除模拟器后通过Xcode的「Devices and Simulators」重新添加
- 执行
xcrun simctl erase all清空所有模拟器数据
- 缓存清理:
- 执行
yarn clear:all && yarn install清空所有依赖和项目缓存 - 多次重启Metro bundler(
yarn start),每次都等模拟器完全启动后再操作
- 执行
- DNS缓存刷新:在终端执行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder刷新Mac的DNS缓存 - Hosts文件检查:确认
/etc/hosts里loc-api.pfi.local指向127.0.0.1的配置正确,文件权限也无异常 - 网络工具干扰排查:确认没有开启VPN或代理工具,排除了这类工具的影响
- Docker环境重置:停止并删除了Traefik容器和关联网络,执行
docker system prune -f清理后重新部署Traefik和API容器,问题依旧存在
我想请教的问题
现在的情况是:Mac主机上所有方式都能正常解析并访问loc-api.pfi.local,模拟器却唯独解析失败,而且其他同事的同款配置完全正常。有没有什么macOS系统层面,或者Xcode/iOS模拟器特有的网络配置,会导致这种模拟器内部DNS解析异常的情况?
内容来源于stack exchange
相关产品推荐
相关产品推荐

