如何从Vagrant VirtualBox虚拟机连接到主机的PostgreSQL?

53

我有一个在Mac OS X主机上运行Ubuntu 12.04的VirtualBox虚拟机。在我的主机(Mac OS X)上,我已经安装了PostgreSQL。我想从我的Ubuntu虚拟机中连接到这个PostgreSQL服务器(从宿主机到客户机)

我猜我应该在VirtualBox本身中配置一些网络参数。从Vagrant文档得知,我需要为我的虚拟机分配一个静态IP地址以使用私有网络。但是一旦创建,如何从我的客户机访问我的主机?

在vagrant文档中我没有找到任何类似的内容。所以,可能有很好的理由。这有意义吗?我不想重复安装PostgreSQL。只想使用我现有的。

2个回答

100

您可以通过在虚拟机上使用默认网关来从客户端访问您的主机。

有关说明,请参见此答案

通过运行netstat -rn,您可以获得默认网关,然后在应用程序的配置文件中使用该IP地址。

运行netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10 可以给出正确的IP地址。(仅在我的计算机上测试过)


1
那个命令对我也有效 (guest == ubuntu/trusty64)。可以连接到mysql和ssh服务(至少)。 - toddkaufmann
很遗憾,这在VMWare Ubuntu虚拟机上无法运行。我可以获取IP地址,但无法通过它发送连接,它们会停留在SYN_SENT状态。 - Kevin Burke

36

简单的方法 - 在Vagrant内部直接使用这个“神奇”的IP地址而无需任何额外的配置:

10.0.2.2

不确定它是否总是静态的,但对我来说很方便 - 我可以在家里使用笔记本电脑,在办公室 - 由路由器给我分配了不同的IP地址,但我的虚拟机知道他们的主机的“可信名称”


1
我无法解释这为什么是默认设置或如何自定义它,但我可以确认在我的几台机器上有这个“ip route”条目: 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100 意味着它似乎给虚拟机本身分配了10.0.2.15的地址。为什么是.2和.15我不知道,但只是为了支持Vagrant似乎正在自动执行此操作。 - Jasmine Hegman
我认为这是VirtualBox默认的NAT和网络配置所致。 - Sebas
如果有人想要在主机和客户端上运行应用程序,那么我们可以使用IPv4地址作为数据库主机。 - Suraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接