首页/云/Docker 容器速查/macvlan 模式:容器直连物理网段
网络与存储52 条

macvlan 模式:容器直连物理网段

给容器分配物理网络中的独立 MAC 与 IP,使容器像同网段物理机一样被外部直接访问;需要指定父接口与网段。

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

容器直连物理网段

macvlan 让容器拿到物理网络里的独立 MAC 与 IP,从局域网其他设备看它就像一台同网段的物理机,访问不需要经过端口映射。创建网络时必须指定父接口、子网与网关,父接口通常是承载业务流量的那块网卡。它带来直观的地址语义,也带来一个固有特性:宿主机默认无法直接访问自己创建的 macvlan 容器。

基本信息

创建方式docker network create -d macvlan --subnet 段 --gateway 址 -o parent=网卡 名称
必填项父接口、子网、网关
典型场景需要被局域网设备直接访问的容器
已知限制宿主与 macvlan 容器默认互相不可达

典型使用场景

  • 设备需要被直接访问:应用广播或局域网发现协议,端口映射无法满足
  • 保留固定 IP:迁移前后地址不变,便于运维登记与白名单维护
  • 替代虚拟机:把轻量服务从虚拟机改为容器,地址规划保持一致
  • 演示网络环境:需要容器像真实设备一样出现在同网段里
  • 上游设备轮询:某些采集设备只认 IP,不容纳 NAT 后的端口

创建与验证

创建与验证
# 基于物理网卡创建 macvlan 网络
docker network create -d macvlan \
  --subnet 192.168.1.0/24 --gateway 192.168.1.1 \
  -o parent=eth0 macnet

# 用固定地址启动容器
docker run -d --network macnet --ip 192.168.1.50 --name web nginx:1.27-alpine

# 从同网段的其他机器验证可达性
ping -c 2 192.168.1.50

# 查看容器地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web

与 bridge 网络对照

维度bridge 网络macvlan 网络
地址来源容器内部私有网段物理网段的独立 IP
外部访问方式需要端口映射直接访问容器 IP
宿主机访问容器可以直接访问默认不可访问,需另建接口
地址管理由 Docker 分配需要自行规划,避免冲突
宿主机要访问自己的 macvlan 容器,需要在宿主侧再建一个同网段的 macvlan 接口并把流量指过去;这是 macvlan 的常规做法而不是故障。
云主机与虚拟化平台对 macvlan 的支持取决于底层交换机与安全策略,上线前先在测试环境验证,尤其是网卡是否允许接收带其他 MAC 的帧。

易错点

  • 容器 IP 与网段内其他设备冲突:缺少地址管理时很容易撞车,上线前把规划表核对一遍
  • 期望宿主机直接访问容器:默认不通且容易误判为网络故障,需要额外建接口或走其他路径
  • 在云主机上直接照搬:底层网络策略常屏蔽这类帧,先小范围验证再推广
  • 把 macvlan 当默认选择:绝大多数服务用端口映射就够了,只有在地址语义必须保留时才用它

数据来源与参考

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