Docker 网络模型之 macvlan 详解,图解

本文深入探讨了Docker中的macvlan网络模型,通过实例展示了如何创建和配置macvlan网络,以及如何实现跨主机通信。通过VLAN子接口解决了物理网卡限制,实现了不同macvlan网络间的三层路由通信。macvlan在网络隔离和多网络需求场景下提供了灵活的解决方案。

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

01 macvlan 用于 Docker 网络

在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动(driver)启用(-d 参数指定),Docker macvlan 只支持 bridge 模式。

下面我们做两个实验,分别验证相同 macvlan 网络和不同 macvlan 网络的连通性。

1.1 相同 macvlan 网络之间的通信
首先准备两个主机节点的 Docker 环境,搭建如下拓扑图示:

1 首先使用 docker network create 分别在两台主机上创建两个 macvlan 网络:
root@ubuntu:~# docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=enp0s8 mac1

这条命令中,

  • -d 指定 Docker 网络 driver
  • --subnet 指定 macvlan 网络所在的网络
  • --gateway 指定网关
  • -o parent 指定用来分配 macvlan 网络的物理网卡

之后可以看到当前主机的网络环境,其中出现了 macvlan 网络:

root@ubuntu:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
128956db798a        bridge              bridge              local
19fb1af129e6        host                host                local
2509b3717813        mac1                macvlan             local
d5b0798e725e        none                null                local

2 在 host1 运行容器 c1,并指定使用 macvlan 网络:

root@ubuntu:~# docker run -itd --name c1 --ip=172.16.10.2 --network mac1 busybox

这条命令中,

  • --ip 指定容器 c1 使用的 IP,这样做的目的是防止自动分配,造成 IP 冲突
  • --network 指定 macvlan 网络

同样在 host2 中运行容器 c2:

root@ubuntu:~# docker run -itd --name c2 --ip=172.16.10.3 --network mac1 busybox

3 在 host1 c1 中 ping host2 c2:

root
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值