我已经在2个docker主机之间设置了Macvlan网络,如下所示:
主机设置:HOST_1 ens192: 172.18.0.21
创建 macvlan 网桥接口(interface)
docker network create -d macvlan \
--subnet=172.18.0.0/22 \
--gateway=172.18.0.1 \
--ip-range=172.18.1.0/28 \
-o macvlan_mode=bridge \
-o parent=ens192 macvlan
创建 macvlan 接口(interface) HOST_1ip link add ens192.br link ens192 type macvlan mode bridge
ip addr add 172.18.1.0/28 dev ens192.br
ip link set dev ens192.br up
主机设置:HOST_2 ens192: 172.18.0.23
创建 macvlan 网桥接口(interface)docker network create -d macvlan \
--subnet=172.18.0.0/22 \
--gateway=172.18.0.1 \
--ip-range=172.18.1.16/28 \
-o macvlan_mode=bridge \
-o parent=ens192 macvlan
在 HOST_2 中创建 macvlan 接口(interface)ip link add ens192.br link ens192 type macvlan mode bridge
ip addr add 172.18.1.16/28 dev ens192.br
ip link set dev ens192.br up
容器设置在两个主机上创建容器
HOST_1# docker run --net=macvlan -it --name macvlan_1 --rm alpine /bin/sh
HOST_2# docker run --net=macvlan -it --name macvlan_1 --rm alpine /bin/sh
HOST_1 中的 CONTAINER_124: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 02:42:ac:12:01:00 brd ff:ff:ff:ff:ff:ff
inet 172.18.1.0/22 brd 172.18.3.255 scope global eth0
valid_lft forever preferred_lft forever
HOST_2 中的 CONTAINER_221: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 02:42:ac:12:01:10 brd ff:ff:ff:ff:ff:ff
inet 172.18.1.16/22 brd 172.18.3.255 scope global eth0
valid_lft forever preferred_lft forever
CONTAINER_1 和 CONTAINER_2 中的路由表Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.18.0.1 0.0.0.0 UG 0 0 0 eth0
172.18.0.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
设想HOST_1 (172.18.0.21) <-> HOST_2 (172.18.0.23)
= OK(反之亦然)HOST_1 (172.18.0.21) -> CONTAINER_1 (172.18.1.0) and CONTAINER_2 (172.18.1.16)
= OKHOST_2 (172.18.0.23) -> CONTAINER_1 (172.18.1.0) and CONTAINER_2 (172.18.1.16)
= OKCONTAINER_1 (172.18.1.0) -> HOST_2 (172.18.0.23)
= OKCONTAINER_2 (172.18.1.16) -> HOST_1 (172.18.0.21)
=确定CONTAINER_1 (172.18.1.0) <-> CONTAINER_2 (172.18.1.16)
= OK(反之亦然)CONTAINER_1 (172.18.1.0) -> HOST_1 (172.18.0.21)
= 失败CONTAINER_2 (172.18.1.16) -> HOST_2 (172.18.0.23)
= 失败问题
我非常接近我想要实现的解决方案,除了这 1 个单一问题。我怎样才能让容器连接到它自己的主机。如果有解决方案,我想知道如何在 ESXi 虚拟化角度进行配置,如果有任何区别,也可以使用裸机配置
最佳答案
这是为macvlan定义的行为,是设计使然。参见Docker Macvlan Documentation
关于容器内的 Docker Macvlan 网络无法连接到自己的主机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49600665/