Skip to content
On this page

如何将容器运行到Docker Macvlan网络上

本文将介绍完整的docker macvlan网络创建流程,避免踩坑

什么是macvlan?

简单来说,macvlan是一种linux上的虚拟网卡技术,用户可以在一张物理网卡上创建多张虚拟网卡,并且每张虚拟网卡都拥有自己的mac地址。这样可以在二层网络很好的管理使用了macvlan的设备。

什么情况需要使用docker macvlan

当你容器中的程序需要独立的网卡支持时,换句话说,当你不得不使用--net=host时,你可以使用macvlan代替它。举两个常见例子:

  • 当你部署一个网心云、甜糖等边缘计算服务容器时,你往往需要使用host模式给容器提供宿主机的网络环境。这类边缘计算服务要求你提供具有公网映射型的网络,如果你使用了如bridge模式并且添加端口映射,容器运行在docker提供的虚拟网络内,即使你的路由器拥有公网ip,你也是端口限制型。这时你可以使用macvlan网络模式,让路由器认为这是一个完全独立的设备,为其提供upnp服务。
  • 同样的,当你有一个容器你想要使用路由器对其进行网速限制时,使用macvlan网络,路由器上可以直接对容器进行速度限制(这总比进到容器然后对虚拟网卡限速来得方便)。

创建步骤

1. 查看物理网卡名称,开启网卡混杂模式

sh
ifconfig

信息如下: 网卡信息 找到其中实际连接上级路由的网卡,也就是图中的enp1s0(enp1s0就是网卡名称)。

如果你不知道哪张是你需要的,你可以看看它的ip地址,找到在你路由网段内的那张。

查看网卡信息中是否有PROMISC标志,如果没有请执行ifconfig 网卡名称 promisc,然后再次使用ifconfig查看。

2. 创建docker Macvlan网络

sh
docker network create -d macvlan --gateway 192.168.0.1 --subnet 192.168.0.0/24 -o parent=enp1s0 macvlan
  • -d macvlan 指定网络驱动为macvlan。
  • --gateway 192.168.0.1 指定你的二层设备网关,也就是你的路由器管理页面的地址。
  • --subnet 192.168.0.0/24 指定子网范围,/24代表掩码255.255.255.0,ip只会在192.168.0.*内。
  • -o parent=物理网卡名称 指定物理网卡,也就是步骤一获得的那个。
  • macvlan 网络名称,可以自定义,注意在第三步创建容器时需要使用

3. 容器运行时指定网络

sh
docker run -d \
  --name test \
  --net=macvlan \
  --ip=192.168.0.200 \
  busybox \
  ping baidu.com
  • 使用--net=网络名称,设置容器到创建好的macvlan网络。
  • 使用--ip=某个未被占用的ip,设置容器固定ip,避免自动分配导致跟二层的其他设备冲突。

Tips

以上就是文章的全部内容了,有任何疑问可以在下方评论哦!

上次更新于: