
macvlan 让容器在局域网里拿到一个和宿主机同网段的独立 IP,路由器看它就是一台独立设备。下面是建这种网络的步骤。
先给网卡开混杂模式
先确认当前在用的网卡:
ip route | grep default

一块物理网卡要同时承载多个 MAC 地址的包,需要打开混杂模式(下面的 enp2s0 换成实际网卡名):
ip link set enp2s0 promisc on
建网络
docker network create -d macvlan -o parent=enp2s0 macvlan --subnet=192.168.31.0/24 --ip-range=192.168.31.0/25 --gateway=192.168.31.1 --ipv6 --subnet=2001:db8:2::/64
parent=enp2s0 就是上面查到的网卡名。末尾的 --ipv6 --subnet=2001:db8:2::/64 是 IPv6 部分,不需要就去掉;留着它就同时支持 IPv4 和 IPv6,不用另外建一张网。
--ip-range 怎么算
/25 写成二进制是 11111111.11111111.11111111.10000000,掩码换算成十进制是 255.255.255.128,也就是说这个虚拟网络能分的地址是 1~127 这 127 个(2^7-1,7 是主机位里 0 的个数;25 是网络位里 1 的个数)。
换成 --ip-range=192.168.31.100/30,就是从 100 往后最多分 3 个地址(/30 是 ...11111100,0 的个数是 2,2^2-1=3)。
查看网络
docker network ls
docker network inspect bridge(查看bridge模式)
docker network inspect host(查看host模式)
docker network inspect macvlan(查看macvlan模式)
关于虚拟网卡的介绍可以看这篇文章:
评论
还没有人留言。