从VirtualBox虚拟机访问本地主机

853

我有一个本地测试/开发服务器(当然是HTTP),监听端口8000。

我在Linux上工作,为了在Internet Explorer 6、7、8等浏览器上测试页面,我使用VirtualBox运行虚拟机;我还需要在Windows环境下查看Firefox的显示效果(例如字体不同)。

在我的实际机器上,我只需使用URL http://localhost:8000 打开网站,如何从虚拟机中访问本地主机呢?

目前我的解决方法是使用IP地址。有更好的建议吗?


55
我简直无法相信这仍然如此繁琐。我使用VB已经多年了,虽然它变得稍微容易一些了,但仍是主要的障碍,网络选项仍然很难理解,并且它仍然不能满足绝大多数用户想要使用它进行的操作。 可能有成千上万的用户使用VB在本地主机上为不同平台测试运行站点(或应用程序)。 想象一下,如果改进软件的这个特定方面,可以节省多少时间和烦恼,这真是让人难以置信。 - Rolf
1
请参考superuser.com上的同一问题:https://superuser.com/questions/310697/connect-to-the-host-machine-from-a-virtualbox-guest-os - Purplejacket
22个回答

22

您需要像为本地主机机器编辑Hosts文件一样,在Windows虚拟机上编辑该文件:

C:\WINDOWS\system32\drivers\etc\hosts

并将您的虚拟主机链接到10.0.2.2。如果您只是使用本地主机,则用“10.0.2.2 localhost”替换“127.0.0.1 localhost”。

例如:

10.0.2.2 localhost
10.0.2.2 local.site1.com
10.0.2.2 local.site2.com

这会告诉您的虚拟机将这些域名指向您的本地计算机。


谢谢,这对我很有帮助(在Docker中使用nginx运行本地网站)- 直接访问IP(10.0.2.2)会出现nginx错误。 - ggzone

10
一些组合方法最终使我成功运行了MacOSX上的flask服务器。在我的Windows虚拟机中,我编辑了hosts文件:
  • 以管理员身份运行记事本
  • 打开C:\windows\system32\drivers\etc\hosts
  • 添加此条目:10.0.2.2 outer
关闭虚拟机,在VirtualBox中的我的Mac上:
  • 进入 VirtualBox > preferences > Network > Host-only Networks > + 添加一个网络 vboxnet1
  • 进入 My_VM > settings > Network > Adapter 1
  • 选择 Enable Network Adapter 并将 Attached to: 设置为 Bridged Adapter
  • 然后将 Advanced > Promiscuous Mode: 设置为 Allow VMs
  • 点击 OK
  • 进入 My_VM > settings > Network > Adapter 1
  • Attached to: 设置回 NAT
然后我去了Adapter 2
  • Attached to:设置为Host-only Adapter并选择先前添加的网络vboxnet1
我在我的Mac上启动了服务器,运行在127.0.0.1:5000上,现在可以通过虚拟机上的http://10.0.2.2:5000 访问它。
天哪,在Mac上测试IE是一场噩梦。怎么没有更简单的方法呢?

1
我希望我能给这个点赞一千次。在发现更简单的方法(如仅编辑hosts文件和使用默认NAT设置)无法解决我的问题后,这是唯一有效的方法。我正在运行MacOS Sierra,并使用https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/上的Win81上的IE11虚拟机,以帮助这里的其他人。 - Manu Kanthan
顺便说一句,我尝试回滚所有这些设置,然后删除VirtualBox并重新安装,从Microsoft重新导入VM。我使用rails s -b 127.0.0.1启动了我的Rails服务器,并从所有VMs访问它的地址为http://10.0.2.2:3000,它可以正常工作。我想知道上面的设置更改是否在回滚后仍然存在。 - Manu Kanthan
1
这对我来说不太一样,特别是适配器2的步骤,我不得不使用Nat适配器设置才能让它成为“vboxnet1”,但最终它还是起作用了。谢谢你提供的线索! - jfunk

4
我通过在Virtualbox设置的网络选项下添加端口转发来解决了此问题。 主机IP设置为127.0.0.1,端口号为8080; 客户机IP设置为网站的任意IP地址(例如10.0.2.5),端口号为8080。 现在从客户机上使用IE浏览器访问http://10.0.2.5:8080

3
在Virtual Box中,你可以像上面所说的那样添加这行hosts文件。
10.0.2.2   outer

如果您的虚拟机没有管理员权限,请将hosts文件移动到桌面,然后编辑以添加10.0....outer这一行,保存该文件,并将其移回原处即可。


2

检查您是否可以使用以下命令连接到父机器:

ipconfig (获取您的IP地址)

ping <ip>telnet <ip> <port>

如果无法访问端口,请尝试在父防火墙中添加新的入站规则以允许本地端口。

然后,您就可以访问 http://<ip>:<port>


2
在虚拟机中:
  1. 将网络设置为桥接网络
  2. 进入高级设置,开启混杂模式:允许所有
现在有点棘手的是你的本地主机,如果你正在使用Node.js,将IP地址设置为0.0.0.0,然后查找自己的IP地址,例如cmd:ipconfig --> 10.0.1.3
在端口号后输入该地址,它就能工作了。

1

一般步骤:

  • 创建一个共享网络,(添加 host-only 或桥接 NIC)
  • 配置首选服务侦听适当的接口(连接到共享 NIC 的接口)
  • 使用 IP:端口访问目标服务,使用属于共享网络的 IP。

0

我需要在本地主机上运行,而不是一些奇怪的IP地址。

1)从您的Mac终端中执行iconfig -a以查找您的本地IP地址。它可能是最后一个。

en7: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV> ether 38:c9:86:32:0e:69 inet6 fe80::ea:393e:a54f:635%en7 prefixlen 64 secured scopeid 0xe inet 10.1.5.60 netmask 0xfffffe00 broadcast 10.1.5.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect (1000baseT <full-duplex,flow-control>) status: active

例如:10.1.5.60

2)启动您的Windows映像。开始 > 输入cmd以获取终端。

3) notepad c:\windows\system32\drivers\etc\hosts

4) 添加以下行 10.1.5.60 localhost

5) 打开IE,输入以下URL,应该可以访问在您的Mac上运行的服务器:http://localhost:3000/


实际上,这似乎会破坏从 Mac 浏览器访问本地主机的 URL。 - Jason Moore

0

在Windows上,使用虚拟的Windows 7系统,唯一有效的方法是使用NAT和端口转发(无法运行桥接连接)。我在这里找到了一个教程:http://www.howtogeek.com/122641/how-to-forward-ports-to-a-virtual-machine-and-use-it-as-a-server/(向下滚动到“将端口转发到虚拟机”的部分)。

通过这些更改,我可以在我的虚拟机上的Internet Explorer 10中使用“http://192.168.xx.x:8888/mywebsite”访问xampp网站。

我在XAMPP控制面板的Netstat(“系统”)中找到了IP地址。


0

如果您使用Virtual Box,您可以使用一行代码将Mac OSX(我认为还有Linux)连接到您的虚拟Windows机器 -> 我建议在终端中运行此命令之前停止该虚拟机。

VBoxManage modifyvm“YOUR VM NAME”--natdnshostresolver1 on

我要注意的是,这是来自Dinghy文档的内容,我正在运行它,但它是一个Virtual Box命令,所以实际上不应该关心您使用什么,只要它是Virtual Box即可。


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