解决从虚拟机启动的Flask应用程序

时间:2012-12-24 16:52:58

标签: linux localhost flask virtualbox

我有以下问题:我有OS xUbuntu,我用VirtualBox运行虚拟机。我的VM上的操作系统是Debian Wheezy。我有Flask应用程序。我想要做的是,当我从VM(在127.0.0.1:5000上)启动我的应用程序时,从我的主机(xUbuntu)在浏览器上运行它。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

VirtualBox使用few strategies来允许“访客”虚拟机(在您的情况下,Debian Wheezy VM)访问“主机”计算机的网络(在您的情况下,xUbuntu)。我将尝试简要介绍每种方法,最后有几种方法可以做你想做的事情,你使用的策略可能与你的具体情况有关。

NAT

默认情况下使用“NAT”(Network Address Translation),它基本上将您的主机设置为网络交换机,将所有访客图像置于“子网”下。虽然这样可以让您的访客轻松访问您的网络和互联网,但却无法轻松让您的主机访问您的访客(尽管可以使用NAT Port Forwarding)。换句话说,您的主机IP可能是192.168.1.9,但随后您的访客IP将是10.0.2.15。如果不设置端口转发,则无法从主机连接到10.0.2.15,只有来自guest虚拟机的连接中的数据包才能找到返回guest虚拟机的路径。

Bridged Network

这允许您的各种来宾VM显示为与主机位于同一网络上的计算机。换句话说,如果您的主机从您的路由器收到IP为192.168.1.100,那么您的访客可能会获得192.168.1.101。在这种情况下,两台计算机可以使用这些IP地址相互通信。但是,这意味着如果没有路由器为其提供IP地址,则主机和guest虚拟机无法通信(例如,如果您在笔记本电脑上运行,并且没有可连接的无线访问点)。这也意味着您的VM可用于接收外部流量,这可能会产生安全隐患。最后,由于您的路由器很可能通过DHCP为您设置IP,因此每当您启动VM时,您的访客IP都可能会发生变化,这可能很烦人。

因此,将系统设置为这样可能对您有用,只要您可以将主机连接到路由器,并且数据包将通过路由器。

Internal Networking

这意味着设置为“内部网络”的访客虚拟机除了可以与主机联系外,还可以在自己的网络上互相通话。但是,我相信它不会允许主机联系VM,所以它可能不是你想要的。请注意,我没有这方面的经验。

Host-Only Networking

这将在主机上创建一个新接口,可用于在主机和来宾之间发送数据包。这意味着不需要路由器来分配IP地址。但是,这也意味着访客无法访问互联网,只能直接连接到主机。

选择哪个?

显然,做什么取决于你的情况。正如this question on Superuser中所示,似乎没有一个好的选择。答案显示了一种解决方法:让访客使用两个独立的适配器,以获得多种网络风格的好处。这个例子是使用一个NAT适配器(允许访客轻松访问互联网),另一个适用于Host-Only(允许主机连接到您的访客)。

如果您在设置此问题时遇到问题,请考虑使用VirtualBox communitySuperuser(这是特定于VirtualBox的问题比StackOverflow更好的地方)。

答案 1 :(得分:1)

如果主机和访客在网络中,那么您可以使用访客的IP地址访问该应用程序。您可以使用" ifconfig"命令读取来宾操作系统的IP地址,然后从主机'浏览器你可以使用url作为" a.b.c.d:5000" (a.b.c.d将是您的访客的IP地址)

答案 2 :(得分:1)

这个问题已经过时了,但谷歌搜索问题首先把我带到了这里。

我发现这很完美:

{{1}}

取自http://dnfehren.github.io/blog/2012/07/20/use-python-flask-server-through-nat-virtualbox-guest/

答案 3 :(得分:0)

我像解释here解决了这个问题。非常感谢大家的帮助!