让我们先看看-
1)VMWare或VirtualBox如何处理虚拟机的网络。 假设主机IP是随机的152.50.60.21,网络CIDR是152.50.60.0/24。
桥接网络 - 通过此接口连接的任何VM都可以在主机所连接的网络上拥有任何空闲IP。 因此,如果IP 152.50.60.30是空闲的,则VM可以绑定到此IP。 同样,第二个VM可以具有IP 152.50.60.32,如果此IP是空闲的。 桥接网络将VM连接到主机所连接的同一网络。 互联网上的任何机器都可以访问VM,并且VM可以直接访问互联网(当然,如果主机网络连接到互联网)。
NAT网络 - NAT是与主机所连接的网络分离的网络。 VMWare可以接受任何有效的CIDR(为了不使事情复杂,我只会引用专用保留块。 虽然,如果我没错,任何CIDR都可以)。 安全地创建在主机上并仅在主机上可访问的新NAT网络可以具有CIDR 10.0.0.0/8或172.16.0.0/12或192.168.0.0/16(或这些网络的任何子网)。 我选择10.0.0.0/8。 因此,在主机上旋转并通过NAT网络连接的两个VM可以具有IP 10.0.3.3和10.0.3.6。由于VM在NAT网络上,因此VM对于外部世界(除非通过主机上的DNAT/端口转发配置)不可见,即VM不可达到外部世界。但是,通过由主机提供的SNAT,VM可以访问外部世界/Internet/Intranet,即VM的IP地址永远不会暴露给外部世界。
VMWare文档参考:理解常见的网络配置
接下来,让我们看看Docker方面——
Docker默认网络
当使用Docker的默认网络(称为桥接网络)在主机上运行映像时(其IP从上面为152.50.60.21),新容器可以从网络-172.16.0.0/12(至少在我的环境中)中获得IP(例如)172.17.0.13。同样,第二个容器可以获得IP 172.17.0.23。为了访问互联网,这些容器依赖于主机提供的SNAT。除了主机提供的端口转发之外,任何互联网/内部网络上的计算机都无法访问容器。因此,容器对于外部世界来说不可见,除了主机。
基于以上情况,我认为Docker提供的默认网络是NAT网络,但Docker喜欢称其为桥接网络。
那么,有谁能说出问题在哪里或者我是如何看待桥接/NAT网络的呢?