在我们的 Web 开发过程中,我们经常需要在多个浏览器中测试我们的应用程序和网站的布局。由于独立运行所有这些浏览器几乎是不可能的,并且诸如IETester之类的应用程序不能完美运行并且无法在 Windows 7 上运行,因此能够为这些浏览器运行虚拟机以拥有“本机”会很好经验。
目前,我正在使用运行IE7的Virtual Windows XP进行尝试。我自己的设置是Windows 7 RC1 64bit。我们的大多数网站和应用程序都是使用 Windows 主机文件中的映射在本地开发的。
问题:
从虚拟机中导航到http://mywebsite.localhost时,会查询虚拟机的主机文件,而不是虚拟机顶部的实际操作系统。此外,当添加完全相同的映射时,浏览器(显然)仍然导航到“虚拟本地主机”。
- 有没有办法让虚拟机查询 Windows 7 主机文件?
- 有没有办法使虚拟机的本地主机与实际的 Windows 7 本地主机相同?
请在开始之前阅读下面的全部说明,并检查您必须执行哪些操作才能撤消这些说明。这是凭记忆,我现在用的是Mac。
我假设您在 NAT 网络模式下使用 VMware,并且您的 VM [虚拟机的常用缩写]。
按照通常的 VMware 说法,我使用术语主机系统来表示运行 VMware 的操作系统安装,而使用客户机系统表示在 VMware 内部运行的系统。
第一部分:在VMware模拟的NAT网络(通常为8号网络)上找到主机系统的IP地址:
在主机上打开一个 cmd.exe 并输入:
ipconfig /全部
记下 VMware NAT 接口的 IP 地址
第二部分:使主机文件统一
更改主机系统上的主机文件 %systemroot%\System32\Drivers\Etc\hosts,使其使用 VMware NAT 适配器的 IP 地址,而不是本地网站的 127.0.0.1。
确保 Web 服务器侦听该 IP 地址。
第三部分:使 hosts 文件可用
在主机系统上,在命令行中:
确保该路径中没有敏感信息。
第四部分:获取主机文件
在来宾系统上创建一个批处理文件 c:\hostsfile\vm_hosts_copy.bat,其中包含以下内容:
将其导入您的注册表:
如果所有这些都完成了,您应该能够在主机系统和所有来宾系统上使用相同的主机文件。来宾系统上的主机文件将在每次重新启动时更新。您只需在主机系统上的常规位置 %systemroot%\System32\Drivers\Etc\hosts 进行更改。
您可以在所有 Windows VM 上使用它,并在大多数 Unix 系统上使用带有 smbclient 和 /etc/rc.local 的类似脚本进行多平台测试。
将您的虚拟机配置为使用桥接网络而不是 NAT(如果尚未这样做)。现在虚拟机与主机在同一个网络上。
将来宾 VM 的主机文件配置为与您的工作站(VM 主机)相同。
即:
[VM主机的IP] mywebsite.localhost
对此的正确答案已经存在于超级用户https://superuser.com/questions/144453/virtualbox-guest-os-accessing-local-server-on-host-os - 但我会在这里总结:
就像每台计算机引用自身的幻地址一样
127.0.0.1
,是来宾操作系统引用其主机的幻地址,至少在 VirtualBox 世界中是这样。我设置可以访问主机操作系统上本地服务的网站的 VirtualBox VM 的过程是:localhost
10.0.2.2
.ovf
文件安装 VM)C:\Windows\System32\Drivers\etc\hosts
并重复您对主机操作系统所做的任何修改,替换127.0.0.1
为10.0.2.2
,例如,您可以添加如下行10.0.2.2 local.dev.example.com
local.dev.example.com
) 中屏蔽的 URL - 它应该加载主机操作系统提供的页面如果您不破解主机文件,则可以
10.0.2.2
直接在来宾操作系统中使用。希望有帮助!有点横向,但是如果您要使用大量 VM 进行测试,请在主机上设置一个 DNS 服务器,并带有一个测试区域,该测试区域转发到您的常规 DNS 服务器。然后将主机更改为使用本地 DNS 服务器,VM 应遵循。
安德斯
由于您可以从虚拟机中访问 Windows 7 文件系统,因此您似乎可以设置虚拟机,以便在启动期间将 Windows 7 主机文件复制到虚拟机的主机文件。不过,这是一个理论而非实际的答案,因为我没有可用的 Windows 7 来试用它。
您应该以某种方式安排您的虚拟机通过 DNS 或 lmhosts 功能“看到”彼此。我也会避免在其中使用带有 localhost 的 pc 名称,您可以完全不使用后缀或像 mypc.local 这样的smth
主 LMHOSTS 文件始终位于 %systemroot%\System32\Drivers\Etc 目录中。使用 Microsoft TCP/IP,您可以包含来自本地和远程计算机的其他 LMHOSTS 文件。
用户可以通过以下方式从网络上的远程计算机导入 LMHOSTS 文件
另请参阅此MS 知识库文章。
以上使我认为您可能遇到了概念上的减速带。您的 VM 不会(也不应该)将其主机视为 localhost。它是网络上不同的逻辑设备。
本地主机是一个保留术语,它总是指向 127.0.0.1。试图颠覆它似乎很像从大锤上折断头部以使其成为手杖(而不仅仅是使用手杖)。
DNS 和主机文件正是出于这个原因而存在的。
我只需将 squid 或其他代理放在主机上,并让所有来宾将其用作代理,因此 localhost 将成为主机的本地主机,并且将尊重主机的主机文件。