虚拟机和docker网络对比
·
虽然都叫"桥接"“主机”,但 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 自动发现机制,要不要展开讲讲容器之间怎么互相通信?
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)