Docker 网络 之 MacVlan

本文详细介绍了如何在Docker中使用MacVlan技术,包括设置不同模式(如bridge、vepa等),指定物理接口parent,创建网络并为容器分配MAC地址,以及注意事项如网络性能影响。同时涵盖了802.1Qtrunk和双栈IPv4/IPv6的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多文章:WorkMap技术博客

MacVlan

有些应用程序,特别是老的应用程序或监视网络流量的应用程序,期望直接连接到物理网络。在这种情况下,可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配一个MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。

在这种情况下,需要指定Docker主机上要用于Macvlan的物理接口,以及网络的子网和网关。

也可以使用不同的物理网络接口,隔离同一主机上的多个Macvlan网络。

注意

  • 由于IP地址耗尽或“VLAN扩散”(网络中有大量的MAC地址),可能会降低网络质量。

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

  • 尽量优先使用bridge(单个Docker主机)或overlay(跨多个Docker主机)网络。

前置条件

  • 大多数云提供商会阻止 macvlan 网络。可能需要连接到物理接口。

  • macvlan 网络驱动程序仅适用于 Linux 主机,不支持 Docker Desktop for Mac、Docker Desktop for Windows 或 Docker EE for Windows Server。

  • 至少 3.9 版本的 Linux 内核,推荐使用 4.0 或更高版本。

参数

  • macvlan_mode

    设置 Macvlan 模式。可以是以下之一:bridge,vepa,passthru,private。默认是bridge

  • parent

    指定要使用的父接口。

创建Macvlan 网络

Bridge模式(直接连接到主机的物理设备)
  • 创建Macvlan网络
    docker network create -d macvlan \
    --subnet=172.16.86.0/24 \
    --gateway=172.16.86.1 \
    -o parent=eth0 \
    my-macvlan-net
    
  • 创建容器,并连接到该macvlan
    docker run --rm -dit \
    --network my-macvlan-net \
    --name my-macvlan-alpine \
    alpine:latest \
    ash
    
  • 查看容器信息,其中的Networks部分,可以看到容器分配了mac地址
    docker container inspect my-macvlan-alpine
    
    输出:
    "Networks": {
    "my-macvlan-net": {
        "IPAMConfig": null,
        "Links": null,
        "Aliases": [
            "bec64291cd4c"
        ],
        "NetworkID": "5e3ec79625d388dbcc03dcf4a6dc4548644eb99d58864cf8eee2252dcfc0cc9f",
        "EndpointID": "8caf93c862b22f379b60515975acf96f7b54b7cf0ba0fb4a33cf18ae9e5c1d89",
        "Gateway": "172.16.86.1",
        "IPAddress": "172.16.86.2",
        "IPPrefixLen": 24,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "02:42:ac:10:56:02",
        "DriverOpts": null
        }
    }
    
  • 查看容器内部的网络信息
    docker exec my-macvlan-alpine ip addr show eth0
    
    输出
    9: eth0@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:10:56:02 brd ff:ff:ff:ff:ff:ff
    inet 172.16.86.2/24 brd 172.16.86.255 scope global eth0
      valid_lft forever preferred_lft forever
    
  • 删除容器及macvlans
    docker container stop my-macvlan-alpine
    docker network rm my-macvlan-net
    
802.1Q trunk bridge 模式(连接到主机上,基于802.1Q协议创建的VLAN子设备)
  • 创建eth0.50 Vlan,并以此作为parent,创建Macvlan
    docker network create -d macvlan \
      --subnet=192.168.50.0/24 \
      --gateway=192.168.50.1 \
      -o parent=eth0.50 macvlan50
    
支持双栈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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值