从 VirtualBox 访问 Rails 服务器

Posted

技术标签:

【中文标题】从 VirtualBox 访问 Rails 服务器【英文标题】:Accessing Rails Server From VirtualBox 【发布时间】:2012-06-22 02:20:25 【问题描述】:

我目前在运行 Ubuntu 12.04 的笔记本电脑上运行 Rails 3.2.3 服务器,并希望通过同样在笔记本电脑上运行的 WinXP (SP3) 虚拟机通过 VirtualBox(4.1.16 版)访问它。尝试使用桥接网络而不是 NAT,但最终在 Firefox(版本 13)中被拒绝连接。 Firefox 显示一个错误页面,其中包括以下内容:

无法连接。

Firefox 无法与 localhost:3000 的服务器建立连接。

有没有一种直接的方法可以从 VirtualBox 远程访问 Rails 服务器?不确定 Vagrant 是否会解决该问题,因为它旨在以相反的方式工作(从主机操作系统到虚拟机)。远程访问 Rails 服务器会很好,因为这意味着可以根据需要在单个 PC 上使用 Internet Explorer(使用版本 8)轻松完成测试。

【问题讨论】:

【参考方案1】:

如果您使用 Pow...

...并且已将您的应用程序配置为myapp,您无法从客户机以myapp.dev 访问它,但您可以使用“魔术”xip.io 域。 只需访问 http://myapp.10.0.2.2.xip.io 即可!

【讨论】:

【参考方案2】:

使用 NAT:

    转到 VirtualBox... 设置 -> 网络 -> 端口转发 为主机端口输入 3000 为访客端口输入 3000 转到您的 VirtualBox 来宾计算机。 在终端运行ifconfig,为eth0 使用inet addr。就我而言,它是 10.0.2.15 当您在 VirtualBox 客户机中运行 rails 服务器时,使用以下命令:$ rails server -b 10.0.2.15 您想绑定到该地址。 在您的主机系统上,转到浏览器并访问http://127.0.0.1:3000

【讨论】:

OP 正在询问如何从运行在 guest 上的客户端访问运行在 host 上的服务器。这个答案正好相反。 不过,答案的重要部分是第 4 步。 嗯,没有。第 4 步可能对这个答案很重要,但这个答案仍然不是问题的答案。 真正节省了我的时间......第 4 步非常关键。我一直在寻找有关 NAT 端口转发的信息。 这对我有用,从我的 virtualbox 客户机连接到主机 rails 服务器,但我在 url 中使用了实际的 IP 地址,而不是 127...【参考方案3】:

如果你在开发模式下运行 rails,它默认带有webrick,它的访问权限仅限于本地主机。 你可以在 dev 中使用thin 之类的东西,它允许从其他机器访问。

【讨论】:

【参考方案4】:

答案是是的有一个简单的方法来做到这一点。我在 OS X Mountain Lion 上使用 VirtualBox,但我怀疑它在 Ubuntu 上也能正常工作。

    您不需要使用桥接模式,NAT 可以正常工作。 只需使用主机的 IP 地址即可。例如192.168.xxx.xxx:3000 作为替代方案,您可以在命令提示符下在虚拟机上使用ipconfig /all(使用 windows 搜索/查找 (windows+f) 并搜索“cmd”)查找 Default Gateway 并使用该 IP。在我的情况下,它是 10.0.2.2 所以 10.0.2.2:3000 有效

【讨论】:

我不知道为什么这被标记了。其他答案实际上都没有给出直接的答案。 根据this question 上的一些cmets,IE8 坚持在URL 中包含协议(http://),否则它根本无法成功连接。 我在这里使用了网关方法,只是在我的 Windows 10 虚拟客户机上编辑了我的主机文件以指向我的域/子域(多租户应用程序)。所以在 Windows 客户机上,我现在可以浏览到类似的内容:mysubdomain.myappname:3000,它工作正常。【参考方案5】:

远程启动 Rails 服务器,然后连接到它:

http://virtualboxhost:3000

如果它不起作用:

    尝试 ping virtualboxhost 查看 netstat -l 在 vi​​rtualboxhost 上打开 3000 端口

【讨论】:

【参考方案6】:

您需要 Ubuntu 的本地 IP。在终端中获取此类型ifconfig

我已经成功使用带有virtualbox的NAT,在你获得机器的ip后,用VM的3000端口输入它,你应该可以访问它。

【讨论】:

【参考方案7】:

您应该输入主机的 IP 而不是 localhost。在桥接模式下,虚拟机和您的主机在您的本地网络中具有不同的 IP。

【讨论】:

使用桥接模式启用从 VM 到主机操作系统上的 Rails 服务器的通信。必须创建一个允许规则以允许到 Rails 服务器的所有传入连接通过,以便使用 UFW(简单防火墙),它是 Ubuntu 的内置防火墙。

以上是关于从 VirtualBox 访问 Rails 服务器的主要内容,如果未能解决你的问题,请参考以下文章

VirtualBox:如何从主机访问 VM 上的虚拟主机?

从 Rails 控制器访问资产路径

如何在 virtualbox 虚拟机上设置静态 IP? [关闭]

markdown 从主机操作系统访问Virtualbox Guest

markdown 从主机操作系统访问Virtualbox Guest

如何从另一个 virtualbox 来宾访问 vagrant 来宾?