对我来说,它们是相同的。主机负责处理虚拟机的 IP,虚拟机可以相互通信并与主机通信,但看不到本地网络上的其他设备。
另一个问题:我host.docker.internal
的 IP 是192.168.0.100
,但是,当我在容器内时,有一个我可以 ping 的 IP 是172.17.0.1
,这是什么以及它是如何工作的?
对我来说,它们是相同的。主机负责处理虚拟机的 IP,虚拟机可以相互通信并与主机通信,但看不到本地网络上的其他设备。
另一个问题:我host.docker.internal
的 IP 是192.168.0.100
,但是,当我在容器内时,有一个我可以 ping 的 IP 是172.17.0.1
,这是什么以及它是如何工作的?
它们在很多方面都有所不同。
VirtualBox 的“NAT”模式完全在 VirtualBox 内部实现路由(以及虚拟机之间的桥接) ——内部网络甚至对于主机来说也是不可见的,主机只能将 VirtualBox.exe 视为建立网络连接的程序。
Docker 的“桥接”模式则依赖于主机操作系统来桥接容器以及在 docker0 和外部世界之间进行路由 - 桥接对于主机而言是可见的虚拟网络接口,流量可以自动进入,而不仅仅是流出,而无需预先配置“端口转发”规则。它与 VirtualBox 的“仅主机”模式(名义上是仅主机)更相似。
由于 1),VirtualBox 的“NAT”模式严格限于 VirtualBox VM,而 Linux“桥接”接口也可以将几乎任何其他以太网类型的接口作为成员。例如,可以将 QEMU VM 的“tap”接口放在同一个桥接中 - 甚至可以将物理接口放在同一个桥接中,从而产生与 VirtualBox“桥接”模式类似的结果。