从 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 在 virtualboxhost 上打开 3000 端口
【讨论】:
【参考方案6】:您需要 Ubuntu 的本地 IP。在终端中获取此类型ifconfig
。
我已经成功使用带有virtualbox的NAT,在你获得机器的ip后,用VM的3000端口输入它,你应该可以访问它。
【讨论】:
【参考方案7】:您应该输入主机的 IP 而不是 localhost。在桥接模式下,虚拟机和您的主机在您的本地网络中具有不同的 IP。
【讨论】:
使用桥接模式启用从 VM 到主机操作系统上的 Rails 服务器的通信。必须创建一个允许规则以允许到 Rails 服务器的所有传入连接通过,以便使用 UFW(简单防火墙),它是 Ubuntu 的内置防火墙。以上是关于从 VirtualBox 访问 Rails 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 virtualbox 虚拟机上设置静态 IP? [关闭]
markdown 从主机操作系统访问Virtualbox Guest