理解容器之间的连通性 – 每天5分钟玩转 Docker 容器技术(34)
通过前面小节的实践,当前 docker host 的网络拓扑结构如下图所示,今天我们将讨论这几个容器之间的连通性。
两个 busybox 容器都挂在 my_net2 上,应该能够互通,我们验证一下:
可见同一网络中的容器、网关之间都是可以通信的。
my_net2 与默认 bridge 网络能通信吗?
从拓扑图可知,两个网络属于不同的网桥,应该不能通信,我们通过实验验证一下,让 busybox 容器 ping httpd 容器:
确实 ping 不通,符合预期。
“等等!不同的网络如果加上路由应该就可以通信了吧?”我已经听到有读者在建议了。
这是一个非常非常好的想法。
确实,如果 host 上对每个网络的都有一条路由,同时操作系统上打开了 ip forwarding,host 就成了一个路由器,挂接在不同网桥上的网络就能够相互通信。下面我们来看看 docker 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
原因就在这里了:iptables DROP 掉了网桥 docker0 与 br-5d863e9f78b6 之间双向的流量。
从规则的命名 DOCKER-ISOLATION 可知 docker 在设计上就是要隔离不同的 netwrok。
那么接下来的问题是:怎样才能让 busybox 与 httpd 通信呢?
答案是:为 httpd 容器添加一块 net_my2 的网卡。这个可以通过docker network connect 命令实现。
我们在 httpd 容器中查看一下网络配置:
容器中增加了一个网卡 eth1,分配了 my_net2 的 IP 172.22.16.3。现在 busybox 应该能够访问 httpd 了,验证一下:
busybox 能够 ping 到 httpd,并且可以访问 httpd 的 web 服务。当前网络结构如图所示:
下一节我们讨论容器间通信的三种方式。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/53966.html
Dockeriptables相关文章
- 一文掌握 Docker 技术体系
- 【重识云原生】第六章容器6.1.9节——Docker镜像技术剖析
- ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runn
- Docker 离线安装_docker官方中文文档
- docker离线安装及配置tab补全_Docker安装
- Docker启动容器命令(docker start 容器名称)
- Docker关闭容器命令(docker stop)
- 「 【Docker】如何处理宝塔docker管理器未启动 」
- 【Docker 系列】docker 学习 四,镜像相关原理
- Windows系统安装Docker遇到error during connect: In the default daemon configuration on Windows, the docker
- Docker容器的重启策略及docker run的–restart选项详解程序员
- 数人云操作系统 2.0 发布 在企业实践中将 Docker 技术快速落地
- flannel概述-每天5分钟玩转 Docker 容器技术(58)
- macvlan网络隔离和连通–每天5分钟玩转Docker容器技术(57)
- 创建 overlay 网络 – 每天5分钟玩转 Docker 容器技术(50)
- 准备 overlay 网络实验环境 – 每天5分钟玩转 Docker 容器技术(49)
- docker managed volume – 每天5分钟玩转 Docker 容器技术(40)
- Data Volume 之 bind mount – 每天5分钟玩转 Docker 容器技术(39)
- Docker 的两类存储资源 – 每天5分钟玩转 Docker 容器技术(38)
- 如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)
- 学容器必须懂 bridge 网络 – 每天5分钟玩转 Docker 容器技术(32)
- 限制容器的 Block IO – 每天5分钟玩转 Docker 容器技术(29)
- 限制容器对内存的使用 – 每天5分钟玩转 Docker 容器技术(27)
- 如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)
- Docker 镜像小结 – 每天5分钟玩转 Docker 容器技术(21)
- RUN vs CMD vs ENTRYPOINT – 每天5分钟玩转 Docker 容器技术(17)
- docker用Docker构建Redis集群的步骤(redis集群使用)
- 【CI/CD技术专题】「Docker实战系列」使用Maven插件构建Docker镜像的方法