Mac无法连接VirtualBox虚拟机运行的localhost服务问题排查求助
解决Mac无法通过localhost访问VirtualBox/Vagrant服务的排查方案
前置检查
- 首先确认虚拟机内的目标服务已正常启动:进入虚拟机内部,执行
curl localhost:对应端口,如果能返回内容说明服务本身正常,问题出在宿主机到虚拟机的网络链路上。
分步排查
- 端口监听状态检查
执行以下命令查看宿主机对应端口是否有进程监听:
lsof -i :你要访问的服务端口 # 或者 netstat -an | grep LISTEN | grep 你要访问的服务端口
如果无任何输出,说明VirtualBox端口转发未生效,跳转到第三步排查。
2. IPv6解析优先级排查
你的hosts配置中同时存在localhost的IPv4、IPv6解析规则,部分服务默认仅监听IPv4地址,浏览器优先走IPv6的::1就会访问失败:
- 直接在浏览器访问
http://127.0.0.1:服务端口测试,如果可正常访问,确认是解析优先级问题 - 解决方案:编辑/etc/hosts文件,将
127.0.0.1 localhost行移动到::1 localhost行之前,保存后执行sudo dscacheutil -flushcache刷新DNS缓存即可。
- VirtualBox端口转发规则校验
你当前的端口转发配置如下:
需要确认两个配置项:
- 「主机IP」要么留空,要么填写
127.0.0.1,不能填写虚拟机IP - 「客端IP」必须填写虚拟机内部网卡的实际IP,可进入虚拟机执行
ip a(Linux系统)查询对应网卡地址后回填
确认配置后重启虚拟机再测试访问。
- 系统防火墙拦截排查
打开Mac「系统设置」>「网络」>「防火墙」,临时关闭防火墙后测试访问,如果可访问说明防火墙拦截了VirtualBox的转发请求,将VirtualBox加入防火墙允许列表即可。 - Vagrant配置校验
如果使用Vagrant启动虚拟机,打开项目根目录下的Vagrantfile,确认端口转发配置格式正确,宿主机端口未被其他进程占用:
config.vm.network "forwarded_port", guest: 虚拟机端口, host: 宿主机端口
修改后执行vagrant reload重启虚拟机生效。
附加说明
如果上述步骤都排查完仍无法访问,执行sudo tcpdump -i lo0 port 你要访问的端口,然后发起访问请求,查看是否有请求包进出,进一步定位链路问题。
内容的提问来源于stack exchange,提问作者JMarcos87
相关产品推荐
相关产品推荐

