You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Vagrant Linux环境构建React Native应用,Expo手机访问失败求助

解决Vagrant虚拟机中Expo无法在手机访问的问题

我之前在Vagrant Linux虚拟机里跑React Native + Expo时,也遇到过一模一样的问题!折腾了好几种方法终于搞定,给你分享几个亲测有效的方案:

1. 先配置Vagrant端口转发

Expo默认需要用到19000、19001、19002这几个端口,Vagrant默认没帮我们转发这些,所以得手动改Vagrantfile:

# 添加这几行到你的Vagrantfile里
config.vm.network "forwarded_port", guest: 19000, host: 19000
config.vm.network "forwarded_port", guest: 19001, host: 19001
config.vm.network "forwarded_port", guest: 19002, host: 19002

保存后重启虚拟机:vagrant reload

2. 让Expo绑定到可访问的IP

默认Expo可能只绑定了虚拟机的localhost,手机根本访问不到。启动Expo时直接指定绑定到所有网卡:

expo start --host 0.0.0.0

或者在项目根目录的app.json里配置默认启动方式,省得每次手动加参数:

{
  "expo": {
    // 其他配置...
    "hostType": "lan",
    "lanType": "ip"
  }
}

这样Expo会自动绑定到虚拟机的局域网IP,手机就能通过这个IP访问了。

3. 切换Vagrant到桥接网络(更省心的方案)

如果端口转发还是有问题,直接把虚拟机改成桥接模式,这样虚拟机会拿到和你主机同网段的真实IP,手机和主机在同一WiFi下就能直接访问虚拟机IP。修改Vagrantfile:

config.vm.network "public_network"

重启虚拟机后,用ip addr或者ifconfig查看虚拟机的局域网IP(比如192.168.1.105),然后在手机Expo客户端里手动输入exp://[虚拟机IP]:19000,或者扫二维码时确保二维码里的IP是这个桥接IP(如果不对就手动输入)。

4. 检查虚拟机的防火墙

虚拟机里的防火墙可能把Expo的端口挡住了,先临时关闭试试:

  • Ubuntu/Debian:sudo ufw disable
  • CentOS/RHEL:sudo systemctl stop firewalld
    如果能访问了,再永久开放端口:
# CentOS/RHEL
sudo firewall-cmd --add-port=19000-19002/tcp --permanent
sudo firewall-cmd --reload

# Ubuntu/Debian
sudo ufw allow 19000:19002/tcp

5. 最后确认网络连通性

一定要确保你的手机和虚拟机在同一局域网:手机连的WiFi要和主机(或者桥接后的虚拟机)在同一个网段,不能用手机流量。如果是用端口转发,手机就访问主机的IP加端口(比如主机IP是192.168.1.50,就输入exp://192.168.1.50:19000)。

如果还是不行,试试重启Expo(expo r -c清除缓存后重启),或者重启虚拟机,大概率就能解决了!

内容的提问来源于stack exchange,提问作者ThierryMichel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:10:37