我正在虚拟机上运行一个 Web 应用程序。
localhost:8888
我可以通过虚拟机内的浏览器查看该应用程序。
我无法在同一个 URL 上看到来自主机的应用程序。这就是目标。
我尝试过VBoxManage modifyvm "VM name" --natdnshostresolver1 on
,但是没有效果。
我的配置是:
- 主持人:Windows 7的
- 客人:Ubuntu 16.04.1 LTS
- 虚拟盒:5.1.4r110228
(访客)ifconfig
在 NAT 上
kirkland@GC:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:d0:fc:0e
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::4c67:70b5:c37b:8fa8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7431 errors:0 dropped:0 overruns:0 frame:0
TX packets:3587 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7444830 (7.4 MB) TX bytes:731870 (731.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1566 errors:0 dropped:0 overruns:0 frame:0
TX packets:1566 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:655936 (655.9 KB) TX bytes:655936 (655.9 KB)
(来宾)/etc/hosts
127.0.0.1 localhost
127.0.1.1 GC
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
答案1
URLlocalhost:8888
仅在您的 VM 内部有效。在 VM 外部,您必须使用ip.ad.dr.ess:8888
或。在后一种情况下,会引入对网络上的hostname:8888
主机名解析为 的依赖。ip.ad.dr.ess
默认情况下,当您在 VirtualBox 中创建虚拟机时,网络适配器 1 设置为 NAT。这将为虚拟机提供 IP 地址10.0.2.15/24
和默认路由10.0.2.2
(应该是您的主机)。长话短说,Windows 不会路由到它为其提供 NAT 的地址,除非先经过更多步骤。
关闭虚拟机并将虚拟机网络适配器 1 设置更改为“桥接”将允许您的主机(以及本地网络上的任何主机)与该虚拟机进行通信,而无需添加任何特殊路由或跳过任何环节。
重启虚拟机。验证与 的连接localhost:8888
。还要验证与 的连接hostname:8888
(假设主机名已not
添加到 /etc/hosts 文件中的 loopback/localhost 地址)和ip-address:8888
。编辑:根据发布的 /etc/hosts 详细信息,您are
将虚拟机以及 Web 应用绑定到环回网络。此配置在虚拟机之外根本无法使用。
如果您的 Web 服务器和应用程序不依赖于首次配置/安装的 IP,并且您的 LAN 上有一个 DHCP 服务器,那么连接到 VM 所需的唯一其他信息就是通过 DHCP 分配给它的 IP 地址。
要查找虚拟机的 IP 地址:从 Ubuntu 桌面 (ctrl-alt-T) 打开终端/控制台窗口,我们使用 hostname、ifconfig 和 grep/etc/hosts
命令将各个部分组合在一起并找到您的地址。在打开的终端中,键入hostname
然后按回车键。这可能是 gc。在同一个终端中,键入ifconfig eth0 | awk '/Bcast/{print $2}'
将显示地址。您应该在 /etc/hosts 中有一行,其中地址后跟主机名。 grep [hostname] /etc/hosts
或者grep [address] /etc/hosts
应该找到您需要的行。如果您得到的不是当前地址后跟主机名,则需要修改 /etc/hosts 文件以添加正确的信息。
您 LAN 上的主机现在应该能够通过端口 8888 连接到您 VM 的 IP。这些主机/客户端通过该端口访问 webapphostname:8888
将取决于客户端主机文件、本地 DNS 或甚至您的 DHCP 服务器上可能提供的 mDNS 服务。
答案2
答案3
为了实现这一点,我认为最好使用桥接模式。如果这不可能或不合适,您需要在主机上使用静态路由。
要添加静态路由,请执行以下操作:查看主机的网络属性。您应该找到一个名为 VirtualBox Host-Only Network 的适配器。找到它的 IP 地址。它可能是 192.168.56.1,我认为这是默认值,但也可能是其他值。将其命名为 abcd 接下来,获取您的客户端的 IP 地址。将其命名为 wxyz(两个地址的前 3 个八位字节应该相同。)获得该 IP 地址后,在主机上打开 DOS 提示符,然后键入以下命令:
route add w.x.y.z mask 255.255.255.0 a.b.c.d
如果有效,您可以使用 -p 开关运行相同的命令以使其永久生效(否则下次重新启动主机时它会消失)。