Macvlan 网络驱动程序

某些应用程序,尤其是遗留应用程序或监控 网络流量,期望直接连接到物理网络。在 这种情况,您可以使用网络驱动程序来分配一个 MAC 地址添加到每个容器的虚拟网络接口中,使其看起来是 直接连接到物理网络的物理网络接口。在这个 的情况下,您需要在 Docker 主机上指定一个物理接口以用于 Macvlan,以及网络的子网和网关。您甚至可以 使用不同的物理网络接口隔离 Macvlan 网络。macvlan

请记住以下事项:

  • 由于 IP 地址,您可能会无意中降低您的网络质量 耗尽或“VLAN 分布”,这种情况发生在您有 网络中的唯一 MAC 地址数量过多。

  • 您的网络设备需要能够处理 “混杂模式”, 其中,可以为一个物理接口分配多个 MAC 地址。

  • 如果您的应用程序可以使用网桥(在单个 Docker 主机上)或 overlay(用于跨多个 Docker 主机进行通信),这些解决方案可能是 从长远来看更好。

选项

下表描述了在使用驱动程序创建网络时可以传递给的特定于驱动程序的选项。--optionmacvlan

选择违约描述
macvlan_modebridge设置 Macvlan 模式。可以是以下之一: , , ,bridgevepapassthruprivate
parent指定要使用的父接口。

创建 Macvlan 网络

创建 Macvlan 网络时,它可以处于桥接模式或 802.1Q Trunk Bridge 模式。

  • 在桥接模式下,Macvlan 流量通过主机上的物理设备。

  • 在 802.1Q 中继桥模式量通过 802.1Q 子接口 Docker 动态创建。这允许您控制路由和 在更精细的级别进行筛选。

桥接模式

创建与给定物理网络桥接的网络 interface 一起使用,请与命令一起使用。你 还需要指定 ,这是流量将 在 Docker 主机上物理完成。macvlan--driver macvlandocker network createparent

$ docker network create -d macvlan \
  --subnet=172.16.86.0/24 \
  --gateway=172.16.86.1 \
  -o parent=eth0 pub_net

如果您需要排除 IP 地址,使其不在网络中使用的 IP 地址,例如 当给定的 IP 地址已被使用时,请使用 :macvlan--aux-addresses

$ docker network create -d macvlan \
  --subnet=192.168.32.0/24 \
  --ip-range=192.168.32.128/25 \
  --gateway=192.168.32.254 \
  --aux-address="my-router=192.168.32.129" \
  -o parent=eth0 macnet32

802.1Q 中继桥接模式

如果指定的接口名称包含点,例如 , Docker 将其解释为 的子接口并创建子接口 自然而然。parenteth0.50eth0

$ docker network create -d macvlan \
    --subnet=192.168.50.0/24 \
    --gateway=192.168.50.1 \
    -o parent=eth0.50 macvlan50

使用 IPvlan 而不是 Macvlan

在上面的示例中,您仍在使用 L3 网桥。您可以改用 L2 桥接器。指定。ipvlan-o ipvlan_mode=l2

$ docker network create -d ipvlan \
    --subnet=192.168.210.0/24 \
    --subnet=192.168.212.0/24 \
    --gateway=192.168.210.254 \
    --gateway=192.168.212.254 \
     -o ipvlan_mode=l2 -o parent=eth0 ipvlan210

使用 IPv6

如果您已将 Docker 守护程序配置为允许 IPv6,则 您可以使用双栈 IPv4/IPv6 网络。macvlan

$ docker network create -d macvlan \
    --subnet=192.168.216.0/24 --subnet=192.168.218.0/24 \
    --gateway=192.168.216.1 --gateway=192.168.218.1 \
    --subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10 \
     -o parent=eth0.218 \
     -o macvlan_mode=bridge macvlan216

后续步骤

Macvlan 联网教程中了解如何使用 Macvlan 驱动程序。