从VirtualBox虚拟机寻址localhost


785

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

我正在Linux上工作,因此要在Internet Explorer 6、7、8等上测试页面。我使用VirtualBox运行虚拟机;我还需要查看Windows环境中Firefox上的外观(例如,字体是不同的)。

在我的真实计算机上,我仅使用URL打开网站http://localhost:8000,如何从虚拟机访问该本地主机?

现在,我的解决方法是使用IP地址。还有更好的主意吗?


38
我不敢相信这仍然如此乏味。我已经使用VB多年了,尽管它变得更容易了,但它仍然是主要障碍,并且联网选项仍然难以理解,并且对于大多数用户想要的东西来说,它仍然开箱即用使用它。可能成千上万的人使用VB在本地的不同平台上测试运行站点(或应用程序)。想改善软件的这一特定方面可以节省多少时间和烦恼,真是令人费解。
罗尔夫

另请参见superuser.com上的相同问题: superuser.com/questions/310697/…–
Purplejacket

Answers:


939

谷歌搜索发现了这一点:http : //data.agaric.com/localhost-from-virtualbox-xp-install-ubuntu

它建议使用IP:,http://10.0.2.2并且对我有用。

因此,我编辑了hosts文件C:\windows\system32\drivers\etc\hosts,并添加了以下条目:

10.0.2.2   outer

如果您正在IE8上进行测试,请记住将其放在http://地址栏中。仅直接放置ip无效。

例如:

http://10.0.2.2:3000/

7
我确实在ipconfig(VirtualBox中的Windows)中注意到,我的VirtualBox的默认路由器是该IP地址...所以这对我来说很有意义。
benc

48
为了能够将您的编辑保存到主机文件,请右键单击记事本并选择“以管理员身份运行”,以启动记事本
Noah Sussman 2012年

25
我必须将VirtualBox网络Attached to设置从Bridged Adapter切换NAT为,以适合我的工作。
Troy Harvey

1
您还可以在VM配置中将其设置为10.0.2.2 localhost,以确保正确解析绝对路径
Mario Peshev 2013年

5
我需要访问localhost不是10.0.2.2由于某些卑鄙的身份验证想要将本地主机作为地址:(
Dominic

408

苹果系统

我在macOS(以前是OS X)上运行Virtual Box,使用Virtual Box在Windows上测试IE等。

在Virtual Box中转到IE,然后localhost通过http://10.0.2.2for localhosthttp://10.0.2.2:3000for 访问localhost:3000

我将网络设置保留为NAT,对于我的情况,则不需要上面建议的桥接。无需编辑任何配置文件。


39
实际上,我必须在IP地址之前添加“ http://”才能使其正常工作(IE8 / WinXP框)。
wrtsprt 2014年

8
但是有什么方法可以将10.0.2.2映射到localhost:8888吗?我的数据库中有本地主机(localhost):8888。在VB中转到10.0.2.2会加载HTML页面,但是所有链接都会中断,因为它们都指向localhost:8888
Michael Giovanni Pumo 2014年

据我所知,@ MichaelGiovanniPumo无法将URL直接映射到特定端口。您必须明确声明端口
Jonathan Lin

2
@JonathanLin我通过简单地将10.0.2.2映射到Win7主机文件上的localhost来解决它,该文件无论如何都与port:8888一起工作,所以它现在可以工作了。谢谢。
Michael Giovanni Pumo 2014年

Marvelous正在运行,macOS Sierra版本10.12.5和virtualbox v 5.1.22
Tabares

82

要在OSX上启用此功能,我必须执行以下操作:

  1. 关闭您的虚拟机。
  2. 转到VirtualBox Preferences -> Network -> Host-only Networks ->单击“ +”图标。单击确定。
  3. 选择您的框,然后单击"Settings" icon -> Network -> Adapter 2 ->“附加到:”下拉列表中的“仅主机适配器”,vboxnet0默认情况下,您的网络()应显示在下面。单击确定。
  4. 再次启动框后,您应该可以通过以下方式访问localhost http://10.0.2.2/

您可以通过以下方式引用它,localhost并通过将其他引用添加到hosts文件(C:\windows\system32\drivers\etc\hosts)中来访问其他本地站点,如下所示:

10.0.2.2    localhost
10.0.2.2    subdomain.localhost

4
此解决方案为我工作,但做了一些修改:制作了新的仅主机适配器(vboxnet0)之后,编辑适配器。在弹出的窗口中,转到“适配器”选项卡并复制IPv4 Address(例如192.168.56.1)。然后,一旦启动虚拟机,请打开浏览器并转到http://192.168.56.1:3000
Robert

在XP和Windows 7上均可使用
Sukeerthi Adiga

1
不幸的是,我无法解决我的子域,我在这里接受了可接受的答案,以检查主机文件是否按预期在Win10上正常工作:serverfault.com/questions/452268 / ...有 什么想法吗?
danjah

在主机MacOs High Serra和来宾Windows 7上工作
Kapitula Alexey,

6
我找不到“仅主机网络”选项。
杰森·摩尔

56

您很可能已将虚拟机的网络设置为NAT。如果将网络设置为“桥接”,则应该能够通过其主机名访问主机。例如,如果您的主机名是“ jsmith-Precision-7510”,并且您想打开http:// localhost:3000 /,则可以在http:// jsmith-Precision-7510:3000 /上查看该页面。

要找到您的主机名,请打开终端/控制台,然后运行命令hostname。您的主机名将在下一行输出。

有关如何将网络设置设置为“桥接”的说明,请参见VirtualBox文档


嗯,由于某种原因,GUI(在我的机器上)没有此选项!
hasen

您使用什么版本?我发现在Mac上,某些基本手册文档完全不同。
09年

喜欢这个解决方案。请注意,在某些较旧的Windows上,whatever.local除非安装Bonjour,否则将无法使用。
马克-安德烈·Lafortune

41

我必须进入virtualbox并将网络设置更改为“ NAT”。之后,我可以localhost通过virtualbox上的仿真器通过以下方式在主机上运行http://10.0.2.2:3000


最近(2019),我下载了Microsoft的Windows 7 IE10来宾VM(我的主机是MacOS Sierra),并且在网络设置方面存在很多问题。因此,我最终只是将其废弃,并下载了Microsoft Windows 7 IE11来宾VM。然后,将其设置为“ NAT”网络,并可以http://10.0.2.2完全按照@Pytth 的说明访问主机的本地主机。
Purplejacket

这应该是公认的答案。
lots0logs

34

如果您已经将适配器连接到NAT,那么如今,将端口转发设置为本地端口是一种更好,更优雅的解决方案。

Settings> Network> Adapter> Advanced>Port forwarding

只需插入新的规则和设置Host port,并Guest port80(用于HTTP)或22(对于SSH),依此类推。

然后,您只需输入 http://localhost

您可能还希望将NAT切换到透明模式。


8
@Boris您在这里描述的是如何从主机到来宾服务器(端口)。但是问题是相反的。
PetrBodnár16年

因为在BT Home Hub上,这是唯一对我
有用的

33

我发现该方法10.0.2.2:<port>有效,但前提是正确设置了混杂模式。安装我的虚拟机后,我转到设置>网络>适配器1。

NAT默认设置,并且混杂模式下拉列表被禁用。我从NAT切换到桥接适配器,该适配器启用了混杂模式下拉菜单,然后将值从“拒绝”更改为“允许VM”。然后,我切换回NAT,这再次禁用了混杂模式,但保留了新值。

只需进行此更改,我就可以启动虚拟机并在上查看虚拟机localhost:<port>上的主机 10.0.2.2:<port>


1
我将Windows 7作为主机运行,将Windows 10作为来宾运行,最终该解决方案在VirtualBox 4.3.30 r 10.16.10中对我有效。谢谢!
Micer 2015年

我刚刚在虚拟盒子上安装了Windows 10,这成功了!
captainill

结合spsaucier的进一步说明,这对我也很有效。按照他的指示,然后我启用了混杂模式-全部启用
DyeA

31

现在无法将对VM中的localhost的请求重定向到主机的localhost到Windows(https://tools.ietf.org/html/rfc6761#section-6.3),包括VM的可用https: //developer.microsoft.com/zh-CN/microsoft-edge/tools/vms/

为了安全起见,Microsoft现在阻止主机文件条目将localhost的地址覆盖为回送地址:: 1以外的任何地址。因此,添加一行VM的主机文件,例如

10.0.2.2 localhost

将被忽略。

(我知道)有两种方法可以覆盖此方法:

1)使用NETSH代理到主机

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=8000 connectaddress=10.0.2.2 connectport=8000

(其中10.0.2.2是VM上的默认网关,而8000是您要解析到主机上的端口。)

2)设置IIS以执行应用程序请求路由,然后将对localhost:port的请求重写为hostIP:port

https://docs.microsoft.com/zh-cn/iis/extensions/configuring-application-request-routing-arr/creating-a-forward-proxy-using-application-request-routing


7
我使用NETSH方法。像魅力一样运作。这是IMO的最佳答案。
凉州

1
我也使用NETSH,就像魔术一样工作。这也是我最好的答案。这是唯一
可行的方法-Van_Paitin

netsh是什么帮助了我,我尝试了在网上找到的所有内容,但没有成功。这将允许访问<protocol>://localhost:<port>,而不是直接通过IP访问。这应该是适用于Windows 10接受的答案
屋大维拉里

与此相关的,这应该是公认的答案,并且具有当前有效的答案
IAmJulianAcosta

26

苹果系统

如果要在Mac上使用Virtualbox设置Windows环境,只需使用适配器上的默认NAT设置,然后在Windows VM中,转到hosts文件并添加以下内容:

10.0.2.2       localhost
10.0.2.2       127.0.0.1

与上面的答案不同,同时包含这两行很重要,否则将不起作用。


6
这对于在Mac上用于调试ie / edge的modern.ie图像非常有用,这就是我提出这个问题的方式。有一个例外:Windows10。Windows 10不允许通过hosts文件修改localhost域(疯狂)解决方法是启用IIS并通过它设置反向代理,并在许多其他步骤中完成此操作:developer.microsoft。 com / zh-
CN

@MaxPRafferty您能使它正常工作吗?我经历了这个线程上的所有其他事情都没有结果。我已经按照此答案的建议更新了主机文件,并按照该链接中的步骤进行操作。关于在步骤7中声明10.0.2.2的位置有点含糊不清。我现在毫不留情地直接转到Windows VM Localhost上的IIS页面
David Weber

@DavidWeber是的-我实际上是提交了该错误,因此我仍然可以使用该图像。10.0.2.2需要进入“操作URL”,列为编辑画面“重写URL”:主要改写页:user-images.githubusercontent.com/1894398/...user-images.githubusercontent.com/1894398/ …编辑规则页面:user-images.githubusercontent.com/1894398/…–
MaxPRafferty

@MaxPRafferty感谢您的帮助和链接。我仍然无法使它正常工作。如此简单的事情,我不确定问题出在哪里。即使尝试其他每个网络类型建议,我也都遵循“ t”的指示,但仍然一无所获。看来我现在最好还是购买一台PC。
David Weber

3
我不认为现在有了新的Windows版本解析器localhost及其DNS,该功能不再有效。我认为127.0.0.1都不能像这样重定向(仅主机名)。
kossmoboleat

22

您需要以与本地主机相同的方式在Windows虚拟机上编辑主机文件:

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

并将您的虚拟主机链接到10.0.2.2,如果您仅使用localhost,则替换

127.0.0.1本地主机和10.0.2.2本地主机

例如:

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

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


谢谢,这对我来说有帮助(使用nginx在docker中运行本地网站)-访问IP Direclty(10.0.2.2)只会给出nginx错误。
ggzone

22

您无需更改主机文件或任何Virtual Box配置。将设置保留在NAT中。转到Windows实例并运行“ cmd”或打开cmd.exe。执行命令“ ipconfig”并获取默认网关 IP地址。在Windows IE上浏览http://10.0.2.2:8080,您会看到与Mac Safari http:// localhost:8080 /http://127.0.0.1:8080相同


1
当本地开发服务器具有链接到的开发依赖项时localhost。(例如webpack-dev-server)
kube

是什么10.2.2.3 or .4?我也可以ping通.2-VM是在Windows Server下运行的Windows Server
ycomp

10

几件事的结合最终使事情对我有利。在macosx上运行Flask服务器。

在Windows VM中,我编辑了hosts文件:

  • 以管理员身份运行记事本
  • 打开 C:\windows\system32\drivers\etc\hosts
  • 添加此条目: 10.0.2.2 outer

关闭VM,并在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现在可以在我的vm上访问它了http://10.0.2.2:5000

男人在Mac上的IE上进行测试真是一场噩梦。有没有更简单的方法?


1
我希望我可以投票一千次。找到更简单的方法(例如简单地编辑主机文件和使用默认NAT设置)后,这是唯一可行的方法-这些帖子都没有解决我的问题。我正在从developer.microsoft.com/en-us/microsoft-edge/tools/vms在Win81上使用IE11的VM运行MacOS Sierra,以防组合在这里帮助其他人。
Manu Kanthan

FWIW,我尝试回滚所有这些设置,然后删除VirtualBox并重新安装,然后从Microsoft重新导入VM。我启动了rails服务器,rails s -b 127.0.0.1并从处的所有VM访问了它,http://10.0.2.2:3000并且该服务器正常工作。我想知道即使将所有内容都回滚后,设置是否仍会从上方徘徊。
Manu Kanthan

1
这对我来说不太一样,尤其是对于Adapter 2的步骤,我不得不使用Nat Adapter设置将其设置为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

在上面所说的虚拟Box中,您可以添加此行主机文件

10.0.2.2   outer

但是要保存它,如果您的VM中没有管理员,只需将主机文件移至桌面,然后对其进行编辑以添加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

常规步骤:

  • 公用网络(添加仅主机或网桥NIC)
  • 配置首选服务以侦听适当的接口(连接到共享NIC的接口)
  • 使用IP:端口访问目标服务,使用属于共享网络的IP。

0

在带有虚拟Windows 7的Windows上,唯一对我有用的方法是使用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文档的内容,但是它是一个虚拟框命令,因此只要它的虚拟框它就实际上不需要关心您使用的是什么


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,以下网址应该会在Mac上运行的服务器上运行: http://localhost:3000/


实际上,这似乎破坏了Mac浏览器中的localhost URL。
杰森·摩尔

-2

获取运行Apache的机器的IP(inet addr:in ifconfig),然后在虚拟框浏览器地址栏中输入该IP 。


-3

实际上,user477494的回答原则上是正确的。

我已经在其他环境(OS X主机-虚拟Windows XP)中应用了相同的逻辑,并且达到了目的。我确实必须循环使用主机LAMP堆栈来获取IP地址和Apache端口来进行解析,但是一旦我发现了这一点,我就在大笑。


您如何在OSX计算机上设置/查找IP的任何建议?
cukabeka

?不确定使用哪个地址-可以通过系统偏好设置/网络-> IP地址找到计算机的地址。这基本上是Macine会对外回答的地址。内部localhost:80应该用于osx的apache服务器-而MAMP默认情况下将使用localhost:8888。
Orionrush 2012年

目前尚不清楚这是指什么答案(链接会很明智),而且似乎更像是一条评论。
isherwood
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.