虽然都叫"桥接"“主机”,但 Docker 和虚拟机的网络模式底层实现完全不同,核心原因在于:虚拟机通过 Hypervisor 模拟了一整套硬件,每个 VM 有独立内核和完整网络栈;而容器共享宿主机内核,通过 Linux 的 Network Namespace 做进程级隔离。 这导致同名模式的行为差异很大。


🖥️ 虚拟机(VMware)的 3 种模式

  • 桥接模式(Bridge):虚拟机通过虚拟交换机 VMnet0 直接桥接到物理网卡,获得和宿主机同网段的独立 IP,在局域网中就像一台真实机器,可被其他设备直接访问。
  • NAT 模式:VMware 创建私有虚拟网络(VMnet8),虚拟机获得私有 IP,通过宿主机的 NAT 转发上网。外部无法直接访问虚拟机(除非配置端口转发)。
  • 仅主机模式(Host-Only):完全封闭的虚拟网络(VMnet1),虚拟机只能和宿主机及其他 Host-Only 虚拟机通信,无法上网

🐳 Docker 的 3 种核心模式

  • Bridge 模式(默认):Docker 创建虚拟网桥 docker0,每个容器获得私有 IP(如 172.17.0.x),通过 NAT 访问外网,对外服务需 -p 端口映射。
  • Host 模式:容器直接复用宿主机的网络命名空间,共享 IP 和端口,无 NAT 开销,性能最高但隔离性最弱。
  • None 模式:容器只有回环接口,完全无网络,需手动配置。

🔑 同名模式为什么行为不同

"桥接"完全不同

这是最容易混淆的地方:

  • VMware 桥接:虚拟机拿到的是局域网真实 IP,和宿主机平级,局域网其他设备可以直接访问它。
  • Docker Bridge:容器拿到的是内部私有 IP(172.17.x.x),对外不可见,必须通过端口映射(-p)才能被外部访问。本质上更像 VMware 的 NAT 模式

简单说:VMware 桥接 = 容器上局域网;Docker Bridge = 容器躲在宿主机后面。

"Host"完全不同
  • VMware 没有真正的 Host 模式:虚拟机始终有自己独立的网络栈和 IP,不可能和宿主机共享端口。
  • Docker Host:容器直接"住进"宿主机的网络空间,容器监听 80 端口 = 宿主机 80 端口被占用,两者完全共享。
对应关系总结
功能需求 VMware 模式 Docker 模式
容器/VM 在局域网可见 Bridge(真实IP) Macvlan(非默认)
容器/VM 能上网但外部不可达 NAT Bridge(默认)
完全隔离不能上网 Host-Only None
共享宿主机网络 ❌ 无对应 Host

Docker 的 Macvlan 模式(非默认,需手动创建)才是真正对应 VMware 桥接的模式——每个容器获得独立的 MAC 地址和局域网 IP,直接作为物理网络中的独立设备存在。


一句话总结:名字相同但底层机制不同。VMware 操作的是"完整虚拟机的网卡",Docker 操作的是"进程的网络命名空间",所以同名模式的行为完全不同。


Docker 网络这块其实还有 Service 和 DNS 自动发现机制,要不要展开讲讲容器之间怎么互相通信?

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐