【问题标题】:Addressing localhost from a VirtualBox virtual machine [closed]从 VirtualBox 虚拟机寻址 localhost [关闭]
【发布时间】:2010-11-18 17:14:40
【问题描述】:

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

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

在我的真机中,我只是使用 URL http://localhost:8000 打开网站,我如何从虚拟机中寻址这个 localhost?

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

【问题讨论】:

  • 我不敢相信这仍然如此乏味。我已经使用 VB 多年了,虽然它变得更容易了,但它仍然是主要障碍,网络选项仍然难以理解,而且它仍然不能满足绝大多数用户的需求使用它。可能有数十万人使用 VB 在 localhost 上针对不同平台测试运行站点(或应用程序)。想一想通过改进软件的这一特定方面可以节省多少时间和烦恼,真是令人难以置信。
  • 在 superuser.com 上也可以看到同样的问题:superuser.com/questions/310697/…

标签: localhost virtual-machine virtualbox


【解决方案1】:

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

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

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

10.0.2.2   outer

如果您在 IE8 上进行测试,请记住在地址栏中输入http://。直接放ip是不行的。

例如:

http://10.0.2.2:3000/

【讨论】:

  • 我确实在 ipconfig(VirtualBox 中的 Windows)中注意到,我的 VirtualBox 的默认路由器是那个 IP 地址......所以这对我来说很有意义。
  • 为了能够将您的编辑保存到主机文件,请右键单击记事本并选择“以管理员身份运行”来启动记事本
  • 我必须将我的 VirtualBox Network Attached to 设置从 Bridged Adapter 切换到 NAT 才能为我工作。
  • 我从developer.microsoft.com/en-us/microsoft-edge/tools/vms 下载的 IE11/Win10 VM 似乎已经配置为在 10.0.2.2 下工作。也许其他可用的虚拟机也是如此。我建议先检查一下,然后再解决编辑伪/etc/hosts 遇到的任何新的安全问题
  • 我需要访问 localhost 而不是 10.0.2.2,因为一些糟糕的身份验证需要 localhost 作为地址:(
【解决方案2】:

macOS

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

在 Virtual Box 中转到 IE 并通过 http://10.0.2.2 访问 localhost 访问 localhost,或访问 http://10.0.2.2:3000 访问 localhost:3000

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

【讨论】:

  • 我实际上必须在 IP 地址前面添加“http://”才能使其工作(IE8 / WinXP 框)。
  • 但是有没有办法将 10.0.2.2 映射到 localhost:8888 ?我有 localhost:8888 作为我的数据库中的主 URL。在 VB 中转到 10.0.2.2 会加载 HTML 页面,但所有链接都会中断,因为它们指向 localhost:8888
  • @MichaelGiovanniPumo 据我所知,您无法将 url 直接映射到特定端口。您必须明确说明端口
  • @JonathanLin 我通过简单地将 10.0.2.2 映射到 Win7 主机文件上的 localhost 来解决它,并且无论如何都可以使用端口:8888,所以它现在可以工作了。谢谢。
  • Marvelous 正在运行,macOS Sierra 版本 10.12.5 和 virtualbox v 5.1.22
【解决方案3】:

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

  1. 关闭您的虚拟机。
  2. 转到VirtualBox Preferences -> Network -> Host-only Networks -> 点击“+”图标。点击确定。
  3. 选择您的框并单击"Settings" icon -> Network -> Adapter 2 -> 在“附加到:”下拉列表中,选择“仅主机适配器”,您的网络 (vboxnet0) 应默认显示在下方。点击确定。
  4. 一旦你再次启动你的盒子,你应该能够通过http://10.0.2.2/访问本地主机

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

10.0.2.2    localhost
10.0.2.2    subdomain.localhost

【讨论】:

  • 这个解决方案对我进行了一些修改:在制作新的仅主机适配器 (vboxnet0) 后,编辑适配器。在弹出的窗口中,转到适配器选项卡并复制IPv4 Address(例如192.168.56.1)。然后一旦你启动虚拟机,打开你的浏览器并转到http://192.168.56.1:3000
  • 适用于 xp 和 windows 7
  • 不幸的是,我无法解析我的子域,我在此处完成了接受答案的步骤,以检查主机文件是否按预期在 Win10 上运行:serverfault.com/questions/452268/… 有什么想法吗?
  • 我找不到“Host-only Networks”选项。
  • 对于找不到“仅主机网络”选项的其他人,点击文件 > 主机网络管理器...virtualbox.org/manual/ch06.html#network_hostonly
【解决方案4】:

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

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

有关如何将网络设置设置为桥接的说明,请参阅 VirtualBox documentation

【讨论】:

  • 嗯,由于某种原因,gui(在我的机器上)没有这个选项!
  • 您使用的是什么版本?我发现在 Mac 上,一些基本的手册文档完全不同。
  • 喜欢这个解决方案。请注意,在某些较旧的 Windows 上,您将无法使用 whatever.local,除非您安装 Bonjour。
【解决方案5】:

现在无法将对 VM 中 localhost 的请求重定向到主机的 localhost 已嵌入 Windows (https://www.rfc-editor.org/rfc/rfc6761#section-6.3),包括在 https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ 上提供的 VM

出于安全原因,Microsoft 现在阻止主机文件条目将 localhost 的地址覆盖为环回地址 ::1 以外的任何内容。所以添加一行虚拟机的主机文件如

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 是您要在主机上解析的端口。)

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

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

【讨论】:

  • 我使用了 NETSH 方法。像魅力一样工作。这是 IMO 的最佳答案。
  • 我也使用过 NETSH,效果非常好。这也是我最好的答案。这是唯一一个有效的
  • netsh 帮助了我,我尝试了在网上找到的所有内容,但没有成功。这将允许访问<protocol>://localhost:<port>,而不是直接通过 IP 访问。这应该是 Windows 10 的公认答案。
  • 这应该是公认的答案,因为它是相关的并且具有当前工作的答案
  • 适用于 Windows 10。您甚至可以省略 listenaddress,它仍然可以工作。您可以根据需要指定协议=tcp。
【解决方案6】:

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

【讨论】:

  • 最近(2019 年)我下载了 Microsoft 的 Windows 7 IE10 来宾 VM(我的主机是 MacOS Sierra),并且在网络设置方面遇到了很多问题。所以我终于把它扔了,下载了 Microsoft Windows 7 IE11 来宾 VM。然后我将它设置为“NAT”网络,并可以通过http://10.0.2.2 访问主机的本地主机,正如@Pytth 所描述的那样。
【解决方案7】:

如果您将适配器连接到 NAT,现在将端口转发设置为本地端口是更好、更优雅的解决方案。

Settings > Network > Adapter > Advanced > Port forwarding

只需插入新规则并将Host portGuest port 设置为80(对于http)或22(对于ssh),等等。

然后你可以通过输入http://localhost来访问那台机器

You may also want to switch NAT to transparent mode.

【讨论】:

  • @Boris 你在这里描述的是如何从主机到来宾服务器(端口)。但问题是反过来的。
  • 因为在 BT Home Hub 上,这是唯一适合我的选择
  • 非常简单的解决方案!谢谢
【解决方案8】:

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

默认情况下会设置 NAT,并且禁用混杂模式下拉菜单。我从 NAT 切换到桥接适配器,它启用了混杂模式下拉菜单,然后将值从“拒绝”更改为“允许虚拟机”。然后我切换回 NAT,它再次禁用了混杂模式,但保留了新值。

仅进行此更改后,我就能够启动我的虚拟机并查看我的主机 localhost:<port> 在我的虚拟机上10.0.2.2:<port>

【讨论】:

  • 我正在运行 Windows 7 作为我的主机和 Windows 10 作为来宾,最后这个解决方案在 VirtualBox 4.3.30 r 10.16.10 中为我工作。谢谢!
  • 我刚刚在虚拟机上安装了 Window 10,这成功了!
  • 结合 spsaucier 的进一步说明,这对我也很有效。按照他的指示,然后我启用了混杂模式 - 全部启用
【解决方案9】:

MacOS

如果你想在 Mac 上使用 Virtualbox 设置 windows 环境, 只需使用适配器上的默认 NAT 设置, 并在您的 Windows 虚拟机中,转到 hosts 文件并添加以下内容:

10.0.2.2       localhost
10.0.2.2       127.0.0.1

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

【讨论】:

  • 这很适合用于在 Mac 上调试 ie/edge 的modern.ie 图像,这就是我提出这个问题的方式。有一个例外:Windows 10。Windows 10 不允许通过 hosts 文件修改 localhost 域(疯狂)解决方法是启用 IIS 并通过它设置反向代理,通过更多步骤完成相同的操作:developer.microsoft.com/en-us/microsoft-edge/platform/issues/…
  • @MaxPRafferty 你能让这个工作吗?我已经经历了这个线程上的所有其他事情,但无济于事。我已经按照这个答案的建议更新了我的主机文件,并按照该链接中的步骤操作。在第 7 步中声明 10.0.2.2 的位置有点模棱两可。它在规则中的哪个位置?我现在无情地直接访问我的 Windows VM 本地主机上的 IIS 页面
  • @DavidWeber 是的,我是 - 我实际上提交了那个错误,所以我仍然有那个图像可用。 10.0.2.2需要进入“action url”,在编辑界面列为“rewrite url”:主重写页面:user-images.githubusercontent.com/1894398/…user-images.githubusercontent.com/1894398/…编辑规则页面:user-images.githubusercontent.com/1894398/…
  • @MaxPRafferty 感谢您的帮助和链接。我仍然无法让它工作。这么简单的事情,我不确定现在问题出在哪里。我已经按照这个到了't',即使在尝试其他每个网络类型建议时仍然一无所获。看来我现在还不如买台电脑。
  • 我认为这不再适用了,因为较新的 Windows 版本解析器 localhost 与他们的 DNS。我认为 127.0.0.1 也不能像这样重定向(仅限主机名)。
【解决方案10】:

您无需更改主机文件或任何 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 相同

【讨论】:

  • 当本地开发服务器具有链接到localhost 的开发依赖项时。 (例如 webpack-dev-server)
  • 10.2.2.3 or .4 是什么?我可以 ping .2 以及那些 - VM 是在 Windows Server 下运行的 Windows Server
【解决方案11】:

您需要像编辑本地主机一样在 Windows 虚拟机上编辑 hosts 文件:

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

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

【讨论】:

  • Thx,这对我来说很有帮助(使用 nginx 在 docker 中运行本地网站)- 访问 IP 直接(10.0.2.2)只会给出 nginx 错误。
【解决方案12】:

几件事的结合最终使我的工作顺利进行。 在 macosx 上运行烧瓶服务器。

在我的 windows 虚拟机中,我编辑了 hosts 文件:

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

在 VirtualBox 中关闭 VM 并在我的 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 上测试真是一场噩梦。怎么没有更简单的方法?

【讨论】:

  • 我希望我能投票一千次。这是在找到更简单的方法(例如简单地编辑主机文件和使用默认 NAT 设置)之后唯一有效的方法 - 这些帖子都没有解决我的问题。我正在使用来自developer.microsoft.com/en-us/microsoft-edge/tools/vms 的 Win81 上的 IE11 VM 运行 MacOS Sierra,以防该组合可以帮助这里的其他人。
  • FWIW,我尝试回滚所有这些设置,然后删除 VirtualBox 并重新安装,从 Microsoft 重新导入虚拟机。我用rails s -b 127.0.0.1 启动了我的rails 服务器,并从http://10.0.2.2:3000 的所有VM 访问它,它工作正常。我想知道上面的设置更改是否在将所有设置都回滚后仍以某种方式徘徊。
  • 这对我来说不太一样,尤其是适配器 2 的步骤,我不得不使用 Nat 适配器设置将其设置为 vboxnet1,但它最终工作了。感谢提供线索!
【解决方案13】:

我通过在网络下的 Virtualbox 设置中添加端口转发来解决。 主机 IP 设置 127.0.0.1 端口:8080 访客 ip:为网站提供任何 IP(例如 10.0.2.5)端口:8080 现在从访客机器访问http://10.0.2.5:8080使用IE

【讨论】:

    【解决方案14】:

    在上面说的virtual Box中,可以添加这一行hosts文件

    10.0.2.2   outer
    

    但是要保存它,如果您的 VM 中没有管理员权限,只需将 hosts 文件移动到桌面,然后对其进行编辑以添加 10.0....outer 行,保存文件并移至其原始位置.

    【讨论】:

      【解决方案15】:

      检查您是否可以通过以下方式访问您的父计算机: ipconfig(获取你的ip地址)

      ping <ip>telnet <ip> <port>

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

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

      【讨论】:

        【解决方案16】:

        在虚拟盒子里

        1. 将您的网络设置为 Bridge 网络
        2. 转到高级设置混杂模式:全部允许

        现在棘手的是你的本地主机,如果你从 Node.js 运行,将 IP 地址设置为 0.0.0.0,然后查找你自己的 IP 地址,例如 cmd:ipconfig --> 10.0.1.3

        输入该地址和端口号。它会起作用。

        【讨论】:

          【解决方案17】:

          一般步骤:

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

          【讨论】:

            【解决方案18】:

            在带有虚拟 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 ("System") 中找到了 IP。

            【讨论】:

              【解决方案19】:

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

              VBoxManage modifyvm "YOUR VM NAME" --natdnshostresolver1 on

              我会注意到这是来自我正在运行的 Dinghy 文档,但它是一个虚拟框命令,所以它实际上不应该关心你使用什么,只要它的虚拟框

              【讨论】:

                【解决方案20】:

                我需要在 localhost 上运行,而不是一些奇怪的 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 浏览器中的 localhost url。
                【解决方案21】:

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

                【讨论】:

                  【解决方案22】:

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

                  我已经在其他环境(OS X 主机 - 虚拟 Windows XP)中应用了相同的逻辑,并且成功了。我确实必须循环主机 LAMP 堆栈来获取 IP 地址和 Apache 端口来解析,但是一旦我弄清楚了,我就笑了。

                  【讨论】:

                  • 您能否就如何在 OSX 机器上设置/找出 IP 提供任何建议?
                  • ?不确定您使用哪个地址 - 可以通过系统偏好设置/网络 -> IP 地址找到计算机的地址。这基本上是机器将在外部回答的地址。内部 localhost:80 应该用于 osx 的 apache 服务器 - 而 MAMP 默认使用 localhost:8888。
                  • 不清楚这指的是什么答案(链接会很明智),它似乎更像是一个评论。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-18
                  • 2011-10-06
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-16
                  • 2021-12-24
                  相关资源
                  最近更新 更多