容器间的连通性

  1. 同一网络中的容器、网关之间都是可以通信的。
  2. my_net2 与默认 bridge 网络能通信吗?
    两个网络属于不同的网桥,不能通信
  3. 如果 host 上对每个网络的都有一条路由,同时操作系统上打开了 ip forwarding,host 就成了一个路由器,挂接在不同网桥上的网络就能够相互通信。
    ip r 查看 host 上的路由表:

ip r

......

172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

172.22.16.0/24 dev br-5d863e9f78b6 proto kernel scope link src 172.22.16.1

......

172.17.0.0/16 和 172.22.16.0/24 两个网络的路由都定义好了。再看看 ip forwarding:

sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1
ip forwarding 也已经启用了。

条件都满足,为什么不能通行呢?

我们还得看看 iptables:

iptables-save

......

-A DOCKER-ISOLATION -i br-5d863e9f78b6 -o docker0 -j DROP

-A DOCKER-ISOLATION -i docker0 -o br-5d863e9f78b6 -j DROP

......
那么接下来的问题是:怎样才能让 busybox 与 httpd 通信呢?

答案是:为 httpd 容器添加一块 net_my2 的网卡。这个可以通过docker network connect 命令实现。

我们在 httpd 容器中查看一下网络配置:

容器中增加了一个网卡 eth1,分配了 my_net2 的 IP 172.22.16.3。现在 busybox 应该能够访问 httpd 了,验证一下:

busybox 能够 ping 到 httpd,并且可以访问 httpd 的 web 服务。

posted @ 2022-03-03 14:09  Richardo-M-Lu  阅读(53)  评论(0编辑  收藏  举报