如何从 vagrant virtualbox 机器连接主机 PostgreSQL
Posted
技术标签:
【中文标题】如何从 vagrant virtualbox 机器连接主机 PostgreSQL【英文标题】:How to connect with host PostgreSQL from vagrant virtualbox machine 【发布时间】:2013-11-24 20:38:33 【问题描述】:我有一台在 Mac OS X 主机上运行 Ubuntu 12.04 的 VirtualBox 机器。在我的主机(Mac OS X)中,我安装了 PostgreSQL。我想从我的 Ubuntu 虚拟机连接到这个 PostgreSQL 服务器(我通常知道这是相反的方式)。
我想我应该在 VirtualBox 本身中配置一些网络参数。我从Vagrant docs 得到的只是我需要为我的虚拟机分配一个静态 IP 以使用专用网络。但是一旦创建,我如何从我的客人那里联系到我的主人?
我在 vagrant docs 中没有找到类似的内容。所以,这可能是有充分理由的。是否有意义?我不想复制 PostgreSQL 安装。就用我现有的吧。
【问题讨论】:
【参考方案1】:您可以使用虚拟机上的默认网关从访客访问您的主机。
请参阅this answer 了解说明。
通过运行netstat -rn
,您可以获得默认网关,然后在应用程序的配置文件中使用该 IP 地址。
运行netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
应该会给你正确的IP 地址。 (仅在我的机器上测试过)
【讨论】:
该命令也适用于我(guest == ubuntu/trusty64)。可以连接到主机 mysql 和 ssh 服务(至少)。 不幸的是,这不适用于 VMWare Ubuntu 机器。我得到一个 IP 地址,但无法通过它发送连接,它们卡在 SYN_SENT 中。【参考方案2】:简单的方法 - 只需从 vagrant 内部使用这个“神奇”IP,无需任何额外配置:
10.0.2.2
不知道它是否总是静态的,但对我来说可以工作而且非常方便 - 我可以在家里或办公室使用笔记本电脑 - 通过路由器为我分配了不同的 IP,但我的虚拟机知道他们的主人?
【讨论】:
我无法解释为什么这是默认设置或如何自定义它,但我可以确认在我的几台机器上我有这个ip route
条目:10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
这意味着它似乎给出了VM 本身的地址为 10.0.2.15。为什么 .2 和 .15 我不知道,但只是支持一下 Vagrant 似乎会自动执行此操作。
我认为这是virtualbox默认nat和网络配置这样做
如果有人想从主机和来宾运行应用程序,那么我们可以使用 ipv4 地址作为数据库主机。以上是关于如何从 vagrant virtualbox 机器连接主机 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章
如何从本地 VirtualBox / Vagrant 开发环境部署到生产环境?
错误VT-x不适用于Virtualbox内的Vagrant机器
如何让 VirtualBox 4.3 允许来自 Vagrant 的内部专用网络