时间:2021-05-02
概述
就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要。再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题。本文就来尝试一下。
方案原理分析
由于使用容器的IP进行路由,就需要避免不同主机上的容器使用了相同的IP,为此我们应该为不同的主机分配不同的子网来保证。于是我们构造一下两个容器之间通信的路由方案。
环境介绍:
? 1 2 3 4 5 6 7 8 主机1的IP地址为:192.168.145.128 主机2的IP地址为:192.168.145.129 为主机1上的Docker容器分配的子网:172.17.1.0/24 为主机2上的Docker容器分配的子网:172.17.2.0/24 这样配置之后,两个主机上的Docker容器就肯定不会使用相同的IP地址从而避免了IP冲突。 综上所述,数据包在两个容器间的传递过程如下: 从container1 发往 container2 的数据包,首先发往container1的“网关”docker0,然后通过查找主机1的路由得知需要将数据包发给主机2,数据包到达主机2后再转发给主机2的docker0,最后由其将数据包转到container2中;反向原理相同,不再赘述。1、分别对主机1和主机2上的docker0进行配置
? 1 2 3 4 5 6 7 8 9 编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:"bip" : "ip/netmask" { "bip", "172.17.1.252/24" } 编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:"bip" : "ip/netmask" { "bip", "172.17.2.252/24" } 重启docker服务 主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效 systemctl restart docker2、添加路由规则
? 1 2 3 4 5 主机1上添加路由规则如下: route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.145.129 主机2上添加路由规则如下: route add -net 172.17.1.0 netmask 255.255.255.0 gw 192.168.145.1283、配置iptables规则
? 1 2 3 4 5 6 7 主机1上添加如下规则: iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE 主机2上添加如下规则: iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE4、启动容器
? 1 2 3 4 5 主机1上启动centos容器: docker run -it --name container1 centos /bin/bash 主机2上启动centos容器: docker run -it --name container2 centos /bin/bash好了,现在两容器可以互ping通。
5、路由持久化(防止主机重启路由丢失)
? 1 2 3 4 root@rancher:~# vi /etc/rc.local 添加路由信息,切记写到exit之前!!!: route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.102.88以上就是关于Docker容器跨主机通信的全部知识点内容,感谢大家的学习和对服务器之家的支持。
原文链接:https://www.cnblogs.com/jarno/p/11770373.html
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、MacVlan实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署Consul服务实现Docker容器跨主机通信Macvlan工作原理:
概述就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通
一、docker跨主机通信docker跨主机网络方案包括:docker原生的overlay和macvlan。第三方方案:常用的包括flannel、weave和c
为支持容器跨主机通信,Docker提供了overlaydriver,使用户可以创建基于VxLAN的overlay网络。VxLAN可将二层数据封装到UDP进行传输
1.Docker与虚拟化Docker容器不使用硬件虚拟化,它的守护进程是宿主机上的一个进程,换句话说,应用直接运行在宿主机内核上。因为容器中运行的程序和计算机的