漂泊的云,停留的心!
人的头脑太复杂,时间过得久……

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/

赞(0)
未经允许不得转载:飘云 » Docker的macvlan模式容器与宿主机通信问题
分享到: 更多 (0)