我已经在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_1
ip 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_1
24: 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_2
21: 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/

10-11 10:21