Docker容器跨主机通信中直接路由方式详解

 更新时间:2019年10月31日 16:50:27   作者:返回主页 Jarno  
在本篇文章里我们给各位整理的是一篇关于Docker容器跨主机通信中直接路由方式详解内容,有需要的朋友们可以参考下。

概述

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

方案原理分析

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

环境介绍:

主机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上的 /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 docker

2、添加路由规则

主机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.128

3、配置iptables规则

主机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 MASQUERADE

4、启动容器

主机1上启动centos容器:
docker run -it --name container1 centos /bin/bash

主机2上启动centos容器:
docker run -it --name container2 centos /bin/bash

好了,现在两容器可以互ping通。

5、路由持久化(防止主机重启路由丢失)

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容器跨主机通信的全部知识点内容,感谢大家的学习和对脚本之家的支持。

相关文章

  • docker中安装quagga详细介绍

    docker中安装quagga详细介绍

    这篇文章主要介绍了docker中安装quagga详细介绍的相关资料,这里提供了详细的步骤,及注意事项,需要的朋友可以参考下
    2016-10-10
  • Rancher+Docker+SpringBoot实现微服务部署、扩容、环境监控

    Rancher+Docker+SpringBoot实现微服务部署、扩容、环境监控

    Rancher 是一套容器管理平台,可以在生产环境中快捷的部署和管理容器,方便的对容器进行cpu内存环境监控、日志监控、扩容缩容,自动重启,这篇文章主要介绍了Rancher+Docker+SpringBoot实现微服务部署、扩容、环境监控,需要的朋友可以参考下
    2022-04-04
  • 安装Docker时执行yum install -y yum-utils报错解决办法

    安装Docker时执行yum install -y yum-utils报错解决办法

    在安装工具时使用yum命令报错,问题通常是服务器无法连接网络,解决此问题需配置镜像源,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-11-11
  • docker如何部署etcd集群

    docker如何部署etcd集群

    这篇文章主要介绍了docker如何部署etcd集群问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • docker在Linux环境下的安装教程

    docker在Linux环境下的安装教程

    这篇文章主要介绍了docker在Linux环境下的安装教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • docker无法搜索和拉取镜像的解决办法

    docker无法搜索和拉取镜像的解决办法

    这篇文章主要给大家介绍了关于docker无法搜索和拉取镜像的解决办法,通过更换可用的镜像加速器地址可以解决这个问题,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • docker安装tomcat并部署Springboot项目war包的方法

    docker安装tomcat并部署Springboot项目war包的方法

    这篇文章主要介绍了docker安装tomcat并部署Springboot项目war包的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 使用Docker run的选项以覆盖Dockerfile中的设置详解

    使用Docker run的选项以覆盖Dockerfile中的设置详解

    今天小编就为大家分享一篇关于使用Docker run的选项以覆盖Dockerfile中的设置详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Docker Compose 容器编排的实现

    Docker Compose 容器编排的实现

    本文主要介绍了Docker Compose 容器编排的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 利用Dockerfile部署SpringBoot项目的方法

    利用Dockerfile部署SpringBoot项目的方法

    这篇文章主要介绍了利用Dockerfile部署SpringBoot项目的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10

最新评论