首页/云/Docker 容器速查/ipvlan 模式:共享 MAC 的 L2/L3 接入
网络与存储52 条

ipvlan 模式:共享 MAC 的 L2/L3 接入

ipvlan 让容器共享父接口 MAC、按 IP 区分流量,相比 macvlan 减少交换机 MAC 表压力;默认 l2 模式,l3 需要额外路由配置。

Docker 容器速查云更新于 2026-10-13

什么是 ipvlan 网络

ipvlan 让多个容器共享同一个父接口的 MAC 地址、靠 IP 区分流量,容器看起来像接在同一块二层网卡上。相比 macvlan,它对交换机 MAC 地址表的压力小得多:一个物理口只占用一个 MAC。默认 l2 模式,l3 模式需要自行规划路由。

基本信息

创建语法docker network create -d ipvlan -o parent=eth0 ...
模式l2(默认)/ l3
关键选项--subnet / --gateway / -o parent=
依赖宿主内核需支持 ipvlan 模块
限制容器访问父接口所在的宿主本身常需额外配置

典型使用场景

  • 容器需要获得与物理网络同网段的真实地址,直接对外提供服务
  • 接入交换机 MAC 表容量紧张,不希望每个容器都占一个 MAC
  • 网络实验:同一物理口上放多组容器,用 IP 区分不同业务
  • 需要容器参与三层路由、由外部路由器决定转发路径的场景
  • 多租户接入:各租户容器同网段但需要严格的策略控制

创建与使用

创建与使用
# 用 l2 模式建一个与物理网段同址的网络,容器共享 eth0 的 MAC
docker network create -d ipvlan \
  --subnet 192.168.1.0/24 --gateway 192.168.1.1 \
  -o parent=eth0 ipvlan-net
docker run -d --network ipvlan-net --ip 192.168.1.60 --name api nginx:1.27-alpine
docker run --rm --network ipvlan-net --ip 192.168.1.61 alpine ip addr show  # 核对地址与接口

ipvlan 与 macvlan 选择依据

对比项ipvlanmacvlan
MAC 占用容器共享父口 MAC每个容器一个独立 MAC
交换机压力小大,MAC 表易溢出
广播与组播受限支持较好
典型场景大规模密集接入需要广播能力的传统应用
l3 模式不转发二层广播,必须自行规划路由;在没准备好路由的情况下切换模式,结果是容器完全不通,切换前先在测试环境验证。
内核对 ipvlan 的支持与版本相关,较老内核上创建会直接报错,动手前用 modinfo ipvlan 确认模块可用。
ipvlan 由内核直接做接口分流,不依赖二层桥接,因此容器发出的流量不会在同一宿主上的其他容器里被看到;做抓包分析时要到父接口或对端设备上抓。
同一父接口上同时存在多个 ipvlan 网络时,地址段必须错开;地址重叠会让内核路由出现歧义,表现为容器时通时不通。

易错点

  • 旧内核缺少 ipvlan 支持时创建网络会直接失败,先确认宿主内核与模块
  • 容器访问父接口所在的宿主自身常需额外配置,不要默认这层通信是通的
  • 地址段规划重叠时内核路由会出现歧义,容器时通时不通,建网前先把网段排布确定下来
  • l3 模式不做二层转发,缺少路由规划时容器之间完全不通,贸然切换容易全天排障
  • --ip 指定的地址必须落在网络 subnet 内,写错会报地址不属于该网络

数据来源与参考

  • Docker 官方文档:Ipvlan network driver(docs.docker.com/network/drivers/ipvlan)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌