Macvlan 是 Docker 提供的一种网络驱动,允许容器直接连接到物理网络,每个容器都有自己的 MAC 地址,在网络上表现为一个独立的物理设备。
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
macvlan_net
-d macvlan
: 指定使用 macvlan 驱动--subnet
: 指定子网范围--gateway
: 指定网关-o parent
: 指定父接口(物理网卡)docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0.10 \
macvlan_vlan10
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--ip-range=192.168.1.32/27 \
--gateway=192.168.1.1 \
-o parent=eth0 \
macvlan_net_range
docker run --net=macvlan_net --ip=192.168.1.100 -itd --name=macvlan_container alpine
主机通信问题:默认情况下,主机无法直接与 Macvlan 容器通信。解决方案:
--aux-address
保留主机 IP网络设备限制:某些云服务商或网络设备可能限制 MAC 地址数量
父接口要求:父接口必须处于混杂模式(promiscuous mode)
ip link add macvlan_host link eth0 type macvlan mode bridge
ip addr add 192.168.1.200/24 dev macvlan_host
ip link set macvlan_host up
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
--aux-address="host=192.168.1.2" \
-o parent=eth0 \
macvlan_net_host
网络不可达:
MAC 地址冲突:
--mac-address
指定容器 MAC性能问题:
macvlan
的 passthru
模式(需要内核支持)Macvlan 提供了强大的网络隔离和性能特性,适合需要容器直接参与物理网络通信的场景。