聊聊docker跨主机之间容器通信问题

目录
  • 一、环境信息
  • 二、具体实践
    • 1.在testa主机上创建docker桥接网络
    • 2.在testb主机上创建docker桥接网络
    • 3.在testa主机中你自定义的网段选取任意IP地址作为你要启动容器IP
    • testb主机中你自定义的网段选取任意IP地址作为你要启动容器IP
    • 4.进入testa主机中的docker
    • 进入testb主机中的docker
    • 5. 配置路由表
    • 添加路由规则
    • 6测试跨主机容器互ping

一、环境信息

 主机名 宿主机IP 容器分配网段 启动容器的IP
testa 192.168.1.105 172.172.0.0/24 172.172.0.10
testb 192.168.1.106 172.172.1.0/24 172.172.1.10

二、具体实践

1.在testa主机上创建docker桥接网络

docker network create --subnet=172.172.0.0/24 docker-br0

2.在testb主机上创建docker桥接网络

docker network create --subnet=172.172.1.0/24 docker-br0

备注:这里选取了172.172.0.0网段,也可以指定其他任意空闲的网段,docker-br0为自定义网桥的名字,可自己任意取名。

注意:这里子网掩码要使用255.255.255.0也就是IP后面的那个24,因为后面要使用iptables配置路由表,我之前使用255.255.0.0 无法配置.所以这里配置成24.\

创建网桥之后,使用ifconfig查看 会多出一个网桥,该网桥在docker启动或者重启之后,会自动显示出来。永久的,可以使用docker network rm docker-br0 移除网桥。

3.在testa主机中你自定义的网段选取任意IP地址作为你要启动容器IP

docker run -i -d --net docker-br0 --ip 172.172.0.10 --name test1 3bee3060bfc8 /bin/bash

testb主机中你自定义的网段选取任意IP地址作为你要启动容器IP

docker run -i -d --net docker-br0 --ip 172.172.1.10 --name test2 3bee3060bfc8 /bin/bash

4.进入testa主机中的docker

docker exec -it test1 /bin/bash 

进入testb主机中的docker

docker exec -it test2 /bin/bash 

5. 配置路由表

添加路由规则

ip route add 对方容器所在的ip网段/子网掩码 via 对方虚拟机ip dev 通过哪个网卡通信

testa主机中

ip route add 172.172.1.0/24 via 192.168.1.106 dev eno16777736

testb主机中

ip route add 172.172.0.0/24 via 192.168.1.105 dev eno16777736 \

添加完成之后,可以使用 route命令 查看添加之后的规则,也可以使用 ip route del 172.172.1.0/24  移除路由规则

6测试跨主机容器互ping

到此这篇关于docker跨主机之间容器通信问题的文章就介绍到这了,更多相关docker跨主机容器通信内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker容器跨主机通信overlay网络的解决方案

    目录 一.Docker主机间容器通信的解决方案 二.Docker Overlay Network 三.使用键值存储搭建Docker主机集群 4.1 系统环境 4.2 安装Consul 4.3 节点配置Dockre守护进程连接Consul 4.4 查看consul 中的节点信息 4.5 创建overlay网络 4.6 使用overlay网络启动容器 一.Docker主机间容器通信的解决方案 Docker网络驱动 Overlay: 基于VXLAN封装实现Docker原生Overlay网络 Macvl

  • Docker跨主机容器通信overlay实现过程详解

    同样是两台服务器: 准备工作: 设置容器的主机名 consul:kv类型的存储数据库(key:value) docker01.02上: vim /etc/docker/daemon.json { "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], 这行改了要修改自己的docker配置文件 "cluster-store": "consul://10

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

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

  • Docker基于macvlan实现跨主机容器通信

    找两台测试机: [root@docker1 centos_zabbix]# docker network ls NETWORK ID NAME DRIVER SCOPE 19ac9a55bedb bridge bridge local 0a3cbfe2473f host host local aab77f02a0b1 none null local [root@docker1 centos_zabbix]# docker network create --driver macvlan --sub

  • 详解Docker 容器跨主机多网段通信解决方案

    一.MacVlan 实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署 Consul服务实现Docker容器跨主机通信 Macvlan工作原理: Macvlan是Linux内核支持的网络接口.要求的Linux内部版本是v3.9–3.19和4.0+: 通过为物理网卡创建Macvlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址.虚拟出来的子接口将直接暴露在相邻物理网络中.从外部看来,就像是把网线隔开多股,分别接受了不同的主机上一样: 物理网卡收到包后,会根据收到

  • 详解Docker容器跨主机通信的方法

    默认情况下Docker容器需要跨主机通信两个主机节点都需要在同一个网段下,这时只要两个Docker容器的宿主机能相互通信并且该容器使用net网络模式,改实现方式为网桥模式通信: 除此之外我们还可以通过使用第三方工具为不同主机间创建一个覆盖网络,使之能够 跨节点通信 ,这里将使用Flanneld实现: 安装etcd 创建 cat /etc/etcd/etcd.conf文件 # [member] ETCD_NAME=infra1 ETCD_DATA_DIR="/var/lib/etcd"

  • 聊聊docker跨主机之间容器通信问题

    目录 一.环境信息 二.具体实践 1.在testa主机上创建docker桥接网络 2.在testb主机上创建docker桥接网络 3.在testa主机中你自定义的网段选取任意IP地址作为你要启动容器IP testb主机中你自定义的网段选取任意IP地址作为你要启动容器IP 4.进入testa主机中的docker 进入testb主机中的docker 5. 配置路由表 添加路由规则 6测试跨主机容器互ping 一.环境信息  主机名 宿主机IP 容器分配网段 启动容器的IP testa 192.168

  • docker overlay实现跨主机的容器互通的方法

    目录 1. docker配置 2. 创建注册中心与网络 3. 启动容器 环境说明 IP 注册中心 192.168.20.5 consule 192.168.20.6 192.168.20.7 1. docker配置 所有的物理机都需要配置,只需要更改相应的网卡名eno3与consul地址 sudo vim /lib/systemd/system/docker.service #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/contai

  • Docker跨主机网络(overlay)的实现

    一.Docker 跨主机通信 Docker跨主机网络方案包括: docker 原生的 overlay 和 macvlan. 第三方方案:常用的包括 flannel.weave 和 calico. docker 通过 libnetwork 以及 CNM 将上述各种方案与docker集成在一起. libnetwork 是 docker 容器网络库,最核心的内容是其定义的 Container Network Model (CNM),这个模型对容器网络进行了抽象,由以下三类组件组成: 1.1 Sandb

  • Docker跨主机网络(manual)的实现

    1. Macvlan 简介 在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会发现所有这些"网卡"的 MAC 地址和 ethx 都是一样的,本质上,它们还是一块网卡,这将限制你做很多二层的操作.有了 Macvlan 技术,你可以这么做了. Macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 inter

  • Docker跨服务器通信Overlay解决方案(上)之 Consul单实例

    目录 场景 任务 想法 分析 概念与选型 小试身手 环境说明 注意事项 动手做 测试 引文 场景 公司微服务快上线了,微服务都是用Docker容器进行部署的,在同一台主机下,把服务都部署上,注册到Nacos的IP与PORT都是内网的IP与Dockerfile中定义的端口号,看起来好像也没什么问题,通过网关去调用也是可以调通的,请注意这有一个大前提: 必须把所有服务容器部署在同一台主机上时才可以! 当服务实例没有部署在同一主机上,比如网关服务在A服务器,服务a在B服务器上,同样注册到Nacos (

随机推荐