两台Vagrant虚拟机API调用报错Errno::ECONNREFUSED的解决求助
解决独立Vagrant虚拟机间API调用连接拒绝问题
嘿,这个问题我之前也碰到过!核心原因很简单:你在网站虚拟机里调用localhost:3001,其实是在访问网站虚拟机自己的3001端口,而不是API虚拟机的。下面给你两种靠谱的解决方案,不用合并Vagrantfile也能搞定:
方案一:临时获取API虚拟机IP并修改网站机hosts
获取API虚拟机的私有IP
- 进入API虚拟机的终端:
vagrant ssh - 执行
ifconfig(precise64系统默认用这个命令),找到eth1网卡下类似inet addr:192.168.33.10的行,这就是它的私有IP。 - 或者在主机终端执行
vagrant ssh-config,也能直接看到虚拟机的IP地址。
- 进入API虚拟机的终端:
修改网站虚拟机的hosts文件
- 进入网站虚拟机:
vagrant ssh - 编辑hosts文件:
sudo nano /etc/hosts - 在文件末尾添加一行:
192.168.33.10 api.local # 把这里的IP换成你查到的API虚拟机实际IP - 保存退出:按下
Ctrl+O,回车确认,再按Ctrl+X。
- 进入网站虚拟机:
更新网站代码中的API地址
把原来调用localhost:3001的地方改成api.local:3001(或者直接用IP192.168.33.10:3001),重启网站服务后就能正常访问了。
方案二:配置静态私有IP(更稳定,推荐)
如果不想每次虚拟机重启都查IP,可以给两台虚拟机配置固定的私有IP,让它们处于同一个内网网段:
修改API虚拟机的Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.network "forwarded_port", guest: 3001, host: 3001 # 添加静态私有IP配置 config.vm.network "private_network", ip: "192.168.33.10" end
修改网站虚拟机的Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.network "forwarded_port", guest: 3000, host: 3000 # 添加静态私有IP,和API机同网段 config.vm.network "private_network", ip: "192.168.33.11" end
生效配置
在两台虚拟机的主机目录下分别执行vagrant reload,重启后它们就会拥有固定IP,互相可以直接访问。之后你可以按方案一的步骤修改网站机的hosts,或者直接用192.168.33.10:3001作为API地址。
注意:确保两台虚拟机的私有IP在同一个网段(比如都是192.168.33.x),这样它们才能互相连通。
内容的提问来源于stack exchange,提问作者EamonnMcElroy
相关产品推荐
相关产品推荐

