十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编给大家分享一下Docker容器间如何通过IP地址进行通信,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,四川雅安服务器托管,海外高防服务器,机柜大带宽,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。概述
就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要。再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题。本文就来尝试一下。
此时两台主机上的Docker容器如何直接通过IP地址进行通信?
一种直接想到的方案便是通过分别在各自主机中 添加路由 来实现两个centos容器之间的直接通信。
方案原理分析
由于使用容器的IP进行路由,就需要避免不同主机上的容器使用了相同的IP,为此我们应该为不同的主机分配不同的子网来保证。于是我们构造一下两个容器之间通信的路由方案,如下图所示。
各项配置如下:
• 主机1的IP地址为:192.168.18.162
• 主机2的IP地址为:192.168.18.141
• 为主机1上的Docker容器分配的子网:192.168.100.0/24
• 为主机2上的Docker容器分配的子网:192.168.200.0/24
这样配置之后,两个主机上的Docker容器就肯定不会使用相同的IP地址从而避免了IP冲突。
我们接下来 定义两条路由规则 即可:
• 所有目的地址为192.168.100.0/24的包都被转发到主机1上
• 所有目的地址为192.168.200.0/24的包都被转发到主机2上
综上所述,数据包在两个容器间的传递过程如下:
• 从container1 发往 container2 的数据包,首先发往container1的“网关”docker0,然后通过查找主机1的路由得知需要将数据包发给主机2,数据包到达主机2后再转发给主机2的docker0,最后由其将数据包转到container2中;反向原理相同,不再赘述。
我们心里方案想的是这样,接下来实践一下看看是否可行。
实际试验
• 1. 分别对主机1和主机2上的docker0进行配置
编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask”
{ "bip":"192.168.100.252/24" }
编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask”
{ "bip":"192.168.200.252/24" }
• 2. 重启docker服务
主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效
systemctl restart docker
• 3. 添加路由规则
主机1上添加路由规则如下:
route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.18.141
主机2上添加路由规则如下:
route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.18.162
• 4. 配置iptables规则
主机1上添加如下规则:
iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.0.0/16 -j MASQUERADE
主机2上添加如下规则:
iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s 192.168.200.0/24 ! -d 192.168.0.0/16 -j MASQUERADE
• 5. 启动容器
主机1上启动centos容器:
docker run -it --name container1 centos /bin/bash
主机2上启动centos容器:
docker run -it --name container2 centos /bin/bash
• 分别在两台机器上安装ifconfig,并查看容器的ip,命令是:
[root@695ba390d221 /]# yum search ifconfig [root@695ba390d221 /]# yum install net-tools.x86_64
主机1上的容器ip地址:
主机2上的容器ip:
• 6. 容器间直接通信
好了,现在两容器可以互ping了
主机1上ping:
主机2上ping:
以上是“Docker容器间如何通过IP地址进行通信”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联成都网站设计公司行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。