• 基于Ubuntu20.04.01

1.创建docker macvlan虚拟网卡

假设宿主机网段为192.168.3.x网段,基础镜像为ubuntu20.04。

1
2
3
4
5
6
#查看docker虚拟网卡
docker network ls

#创建docker macvlan虚拟网卡
#注意网段与网卡名称
docker network create -d macvlan --subnet=192.168.3.0/24 --ip-range=192.168.3.220/24 -o macvlan_mode=bridge -o parent=ens33 macvlan

2.创建与宿主机同网段docker容器

1
2
3
4
5
6
7
8
9
#拉取ubuntu20.04镜像
docker pull ubuntu:20.04

#查看镜像
docker images

#创建运行容器
#--ip参数后的地址,为容器的IP地址
docker run -itd --network=macvlan --ip=192.168.3.202 --name=test ubuntu:20.04

3.使macvlan模式的容器与宿主机通信

由于macvlan模式宿主机和容器是没办法直接进行网络通信。

需要在宿主机上再建立一个macvlan,然后修改路由,使数据经由该macvlan传输到容器内的macvlan即可,macvlan之间是可以互相通信的。

以下操作都在宿主机上运行

1
2
3
4
5
6
7
8
9
10
11
#新增一个叫mynet(不要和容器的macvlan重名)的macvlan接口
ip link add mynet link ens33 type macvlan mode bridge

#为该接口分配ip网段,并启用
#添加200网段
ip addr add 192.168.3.200 dev mynet
ip link set mynet up

#修改路由,使宿主机到192.168.3.200的通信全部经由mynet进行
#添加容器IP
ip route add 192.168.3.202 dev mynet