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

两台Vagrant虚拟机API调用报错Errno::ECONNREFUSED的解决求助

解决独立Vagrant虚拟机间API调用连接拒绝问题

嘿,这个问题我之前也碰到过!核心原因很简单:你在网站虚拟机里调用localhost:3001,其实是在访问网站虚拟机自己的3001端口,而不是API虚拟机的。下面给你两种靠谱的解决方案,不用合并Vagrantfile也能搞定:

方案一:临时获取API虚拟机IP并修改网站机hosts

  1. 获取API虚拟机的私有IP

    • 进入API虚拟机的终端:vagrant ssh
    • 执行ifconfig(precise64系统默认用这个命令),找到eth1网卡下类似inet addr:192.168.33.10的行,这就是它的私有IP。
    • 或者在主机终端执行vagrant ssh-config,也能直接看到虚拟机的IP地址。
  2. 修改网站虚拟机的hosts文件

    • 进入网站虚拟机:vagrant ssh
    • 编辑hosts文件:sudo nano /etc/hosts
    • 在文件末尾添加一行:
      192.168.33.10 api.local  # 把这里的IP换成你查到的API虚拟机实际IP
      
    • 保存退出:按下Ctrl+O,回车确认,再按Ctrl+X。
  3. 更新网站代码中的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:26:28