目标:假设两台主机 A 和 B。A 上的容器 x 应该能够从主机 B ping 通,这样容器 x 与 A 和 B 位于同一网络中,并且有自己的 IP 地址。
Docker 为多主机网络提供了两种类型的网络解决方案 1) 带有/不带有 docker swarm 的覆盖网络 2) Macvlan 网络。 我想知道第二类 Macvlan 网络如何实现目标
目标:假设两台主机 A 和 B。A 上的容器 x 应该能够从主机 B ping 通,这样容器 x 与 A 和 B 位于同一网络中,并且有自己的 IP 地址。
Docker 为多主机网络提供了两种类型的网络解决方案 1) 带有/不带有 docker swarm 的覆盖网络 2) Macvlan 网络。 我想知道第二类 Macvlan 网络如何实现目标
创建一个名为 my-macvlan-net 的 macvlan 网络:
$ docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 \
my-macvlan-net
启动一个示例 alpine 容器并将其附加到 my-macvlan-net 网络:
$ docker run --rm -dit \
--network my-macvlan-net \
--name my-macvlan-alpine \
alpine:latest \
ash
检查容器网络设置:
$ docker exec my-macvlan-alpine ip addr show eth0
9: eth0@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:10:56:02 brd ff:ff:ff:ff:ff:ff
inet 172.16.86.2/24 brd 172.16.86.255 scope global eth0
valid_lft forever preferred_lft forever
$ docker exec my-macvlan-alpine ip route
default via 172.16.86.1 dev eth0
172.16.86.0/24 dev eth0 scope link src 172.16.86.2
当服务正在运行时,您可以附加它们以进行调试
docker exec -ti some-service.1.lz3j7mqb1ux4jp5cwe87gpiok sh
您需要使用docker ps
.
然后您可以尝试 ping 另一个服务。但这只有在两个服务都连接到同一个不是入口的覆盖网络时才有效。
docker network create -d overlay dev
docker service create --network dev --name a ...
docker service create --network dev --name b ...
然后你可以ping a
从 b 和ping b
从 a。