docker默认使用linux bridge,成熟但有veth和netfilter两层开销;macvlan轻量直连、隔离强但依赖网卡混杂模式且无法直通宿主机;ipvlan复用mac、性能优、支持host互通,l3模式更安全。

Linux Bridge:传统可靠,但有额外开销
Bridge 模式是 Docker 默认的网络方案,本质是创建一个虚拟交换机,容器通过 veth pair 连接到 bridge(如 docker0),再经 NAT 或 host 路由对外通信。它的优势在于成熟、兼容性好、支持端口映射和跨主机通信(配合 overlay)。但性能上存在两层开销:一是 veth pair 的内核协议栈穿越(从容器命名空间到 host 命名空间),二是桥接转发需经过 netfilter(iptables)链,尤其启用防火墙规则时延迟明显。隔离性中等:容器共享 host 网络命名空间的二层视角(同属一个广播域),ARP 和广播可见,需靠 ebtables 或 VLAN 划分进一步隔离。
macvlan:轻量直连,二层隔离强但需网卡支持
macvlan 允许容器直接绑定到物理网卡(或子接口),每个容器拥有独立 MAC 地址,像物理机一样接入下层交换网络。性能接近裸机:绕过 veth 和 bridge,数据包直达网卡驱动,无额外协议栈拷贝。隔离性好于 bridge——不同 macvlan 子接口默认处于不同广播域(取决于 mode:private / vepa / bridge / passthru),可天然抑制 ARP 广播扩散。但限制明显:宿主机网卡需支持 promiscuous 模式;交换机端口通常要开启混杂或配置 trunk;同一物理网段下 MAC 地址过多可能引发交换机 MAC 表震荡;且容器无法与宿主机直接通信(除非额外配置 macvlan 子接口给 host)。
ipvlan:MAC 复用,兼顾性能与 host 互通
ipvlan 与 macvlan 类似,也直连物理网卡,但所有容器共享宿主机的 MAC 地址,仅靠 IP 区分流量。这规避了 macvlan 的 MAC 泛滥问题,对交换机更友好,也无需 promiscuous 模式。性能与 macvlan 接近,同样跳过 veth 和 bridge。隔离性取决于 mode:L2 mode 下仍属同一广播域(但无 MAC 冲突),L3 mode 则完全隔离二层,仅支持三层路由转发(类似路由器接口),广播不透传,安全性更高。关键优势是容器能与宿主机 IP 直通(同一网段下无需 NAT 或额外路由),适合需要 host-container 频繁交互的场景(如监控、日志采集)。
选型建议:按场景权衡
- 追求简单稳定、跨主机部署、需端口映射 → 选 bridge(尤其搭配 CNI 插件如 Calico/Flannel)
- 高性能 + 物理网络可控(交换机可配、允许 promisc)+ 强二层隔离 → macvlan L2 private/vepa mode
- 高性能 + 需容器与宿主机同网段互通 + 交换机限制多(如云厂商虚拟网卡不支持 promisc)→ ipvlan L3 mode
- 需严格网络策略、细粒度 ACL、微隔离 → bridge + network policy(如 Calico)或 ipvlan + eBPF(如 Cilium)更合适











