概述

就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要。再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题。本文就来尝试一下。

Docker容器间通讯直接路由方式实现网络通讯

此时两台主机上的Docker容器如何直接通过IP地址进行通信?

一种直接想到的方案便是通过分别在各自主机中 添加路由 来实现两个centos容器之间的直接通信。

方案原理分析

由于使用容器的IP进行路由,就需要避免不同主机上的容器使用了相同的IP,为此我们应该为不同的主机分配不同的子网来保证。于是我们构造一下两个容器之间通信的路由方案,如下图所示。

Docker容器间通讯直接路由方式实现网络通讯

各项配置如下:

"htmlcode">

{ "bip":"192.168.100.252/24" }

编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:”bip” : “ip/netmask”

{ "bip":"192.168.200.252/24" }

"htmlcode">

systemctl restart docker

"htmlcode">

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

"htmlcode">

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

"htmlcode">

docker run -it --name container1 centos /bin/bash

主机2上启动centos容器:

docker run -it --name container2 centos /bin/bash

"htmlcode">

[root@695ba390d221 /]# yum search ifconfig
[root@695ba390d221 /]# yum install net-tools.x86_64

主机1上的容器ip地址:

Docker容器间通讯直接路由方式实现网络通讯

主机2上的容器ip:

Docker容器间通讯直接路由方式实现网络通讯

"text-align: center">Docker容器间通讯直接路由方式实现网络通讯

主机2上ping:

Docker容器间通讯直接路由方式实现网络通讯

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。