告诉Vagrant主机的ip

jst*_*tim 31 ruby-on-rails vagrant ruby-on-rails-4

我正在使用一个流浪盒作为一个开发机器,用于一个奇怪的依赖项目,我似乎只能安装在ubuntu上.

我创建了我的数据库并在我的主机上安装了我的应用程序代码,并通过NFS文件共享和postgres配置与vagrant实例共享它们.

我的问题是,当我将计算机从工作地移到家里时,我的计算机的IP会发生变化而我的计算机database.yml无效.为了使我的服务器和控制台正常工作,我需要在每次加入新网络时使用主机的新IP地址更新yaml文件.

由于rails应用程序在vagrant上运行(即使它的文件位于我的主机上),任何尝试从ifconfig中取出ip的尝试都将失败,因为它正在查看VM而不是主机框.所以像这样的东西不起作用:

# database.yml
development:
  host: <%= `ifconfig en0 | grep "inet " | cut -d" " -f2` %>
Run Code Online (Sandbox Code Playgroud)

Vagrant文​​件中是否有配置传递此信息,或者是否可以创建ubuntu实例可以读取的主机ip的ENV变量?

Mat*_*per 53

根据,您可以通过VM的默认网关访问主机.

netstat -rn在客户上运行应该会在我的机器上为您提供相关信息,将上面的代码更改为以下内容,看起来它会让您感觉良好:

# database.yml
development:
  host: <%= `netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10` %>
Run Code Online (Sandbox Code Playgroud)

  • 替代使用awk:`GW = $(netstat -rn | awk'/^0\.0\.0\.0/ {print $ 2}') (3认同)
  • 在配置文件中,可以将其分配给变量,例如:`GW = $(netstat -rn | grep"^ 0.0.0.0"| cut -d"" - f10)`. (2认同)

Dan*_*hka 42

不确定,如果它适用于所有人,虽然我的所有虚拟盒机都通过这个"魔术"ip看到主机:

10.0.2.2
Run Code Online (Sandbox Code Playgroud)

不知道它是否总是静态的,虽然对我而言非常方便 - 我可以在家里,办公室使用笔记本电脑 - 通过路由器为我分配不同的IP,但我的VM知道他们的主人的"可信赖的名字"


Fil*_*ina 5

作为替代马特的解决方案,你也可以使用专用网络Vagrantfile.

如果添加如下行:

config.vm.network "private_network", ip: "192.168.42.10"
Run Code Online (Sandbox Code Playgroud)

Vagrant将向虚拟机添加第二个适配器,并将其连接到该子网上的仅主机适配器.

这样你就可以database.yml简单地指向192.168.42.1所有时间(在这个例子中).