我有一个基本的问题,我不明白我的笔记本电脑上运行的虚拟机的IP。 我使用boot2docker (基本上,它创build了一个VirtualBox虚拟机来访问我的Mac上的Docker)。 创build的虚拟机的IP:
boot2docker ip // IP of the vm created
给我192.168.59.103 ,我的本地IP地址是192.168.1.21 。
我在虚拟机中运行一个小网站,可以通过我的本地机器的浏览器访问: http://192.168.59.103 : http://192.168.59.103
我非常基本的networking知识使我认为只有192.168.1.x地址可以从我的本地机器访问。 为什么192.168.59.103可见?
我非常基本的networking知识使我认为只有
192.168.1.x地址可以从我的本地机器访问。 为什么192.168.59.103可见?
一点都不。 如果是这样的话,你怎么能通过你的电脑访问这个网站或任何在互联网上的网站?
特定于您的情况,您的本地IP地址192.168.1.21是从LAN路由器分配的地址(很可能是通过DHCP)。
但是, 192.168.59.103是您的桌面上的一个networking,在您的计算机的范围内,只有您的计算机,在192.168.59.x的VirtualBox虚拟“路由器”范围内运行。 这意味着当你启动Virtual Box的时候,它不仅仅提供了一个虚拟化的环境,它也在模拟基本的networking/路由器function。
不太清楚你的Docker设置如何工作,但是如果你要启动Virtual Box应用程序界面,然后select你的特定的虚拟机,然后select“networking”,你会看到一个活动适配器的设置应该是“NAT “这当然代表networking地址转换, 正如在虚拟networking文档中所解释的那样,虚拟networking的标题是”虚拟networking“(大提示):
networking地址转换(NAT)服务的工作方式与家庭路由器类似,将使用该系统的系统分组到networking中,并防止该networking外的系统直接访问系统内部的系统,但让系统内部彼此通信外部使用TCP和UDP over IPv4和IPv6的系统。
就那么简单。 Virtual Box有它自己的软件仿真路由器,它被烧入它的核心networking代码来处理NAT和其他路由。
所以当你通过Docker或者其他的东西启动一个虚拟的客户操作系统的机器,并且连接到它时,你真的通过只存在于桌面上的小型隔离networking路由器连接到它。
现在,如果你想让这个客户操作系统连接到你的本地桌面之外,有很多方法可以做到这一点。 但是这远远超出了这个问题背景的范围。 默认的Virtual Box行为是在您的桌面上创build一个networking,仅用于连接它正在运行/pipe理的客户机操作系统。
如果您注意到,在安装virtualbox时,它告诉您networking连接可能会因为要在您的计算机中安装虚拟networking适配器而中断。 所以检查你当前的networking适配器,你会发现那些虚拟的。
现在检查这些虚拟适配器的IP地址,你会发现一个IP 192.168.59.X是assgiend其中之一。 因此,您正在使用此networking适配器连接到这些虚拟实例。 这非常简单。