添加两个桥接网络将提供隔离。
docker create network net1
docker create network net2
然后启动一些容器
docker run -d --name one --net net1 busybox sleep 600
docker run -d --name two --net net2 busybox sleep 600
docker run -d --name three --net net1 busybox sleep 600
one
并将three
在它们连接到同一个网桥时进行通信
docker exec one ping three
docker exec three ping one
其他人将在跨越网络/网桥时失败
docker exec one ping two
docker exec two ping one
docker exec three ping two
您会注意到 docker 在网络内提供主机/名称解析,因此实际上是上述失败的主机名解析。IP 也不在网桥之间路由。
$ docker exec three ip ad sh dev eth0
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:14:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.20.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe14:3/64 scope link
valid_lft forever preferred_lft forever
平two
$ docker exec three ping -c 1 -w 1 172.21.0.2
PING 172.21.0.2 (172.21.0.2): 56 data bytes
--- 172.21.0.2 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
平one
docker exec three ping -c 1 -w 1 172.20.0.2
PING 172.20.0.2 (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.044 ms
此设置也适用于覆盖网络驱动程序,但设置起来更复杂。