Docker的macvlan模式容器与宿主机通信问题

纸扎戏偶

简介

Docker的macvlan模式非常好用(吹爆),但是该模式有一个重大缺陷,宿主机与容器无法直接通信,如宿主机ping容器的IP,尽管他们属于同一网段,但是也是ping不通的,反之亦然。 因为该模式在设计的时候,为了安全禁止了宿主机与容器的直接通信,不过解决的方法其实也很简单——宿主机虽然没办法直接和容器内的macvlan接口通信,但是只要在宿主机上再建立一个macvlan,然后修改路由表,使数据经由宿主机下的macvlan传输到容器内的macvlan即可。

原理

macvlan之间是可以互相通信的。

环境

宿主机 eth0:192.168.2.2/24 Docker任一容器:192.168.2.11/24

解决方案

❗❗❗以下操作均在 宿主机 中,不是在Docker容器中,自行替换以下代码中加粗的参数 新增一个叫mynet(不要和容器的macvlan重名)的macvlan接口 ip link add mynet link eth0 type macvlan mode bridge 为该接口分配ip ip addr add 192.168.2.3 dev mynet 启用名称为mynet的macvlan ip link set mynet up 修改路由表,使宿主机(192.168.2.2/24)到Docker任一容器(192.168.2.11/24)的通信全部经由mynet中转,每一个容器都需要添加一条路由 ip route add 192.168.2.11 dev mynet 来源参考: macvlan模式容器与宿主机通信问题 | 爱折腾的小白 - MoPoQAQ https://mopo-blog.ddnsfree.com/2021/02/23/n1-eth0-macvlan/

文章版权声明:除非注明,否则均为我爱教程术原创文章,转载或复制请以超链接形式并注明出处。