Docker跨主机容器访问通信

在同一宿主机下的Docker的容器之间是默认互相联通的。通过docker inspect id或name可以查看到ip地址。在不通的容器中来执行ping是可以ping通的。

但我们通过观察发现,每一个启动容器的ip地址不是固定的,所以如果我们通过ip地址来实现互连明显是不靠谱的。但我们发现这些ip又处于同一网段中而且默认是127.0.0.X,这就是Docker容器默认跨主机之间的链接方法的第一种:网桥实现

在docker宿主机上运行ifconfig命令可以看的存在一个docker0的网桥。Docker容器通过docker0 网桥实现同一主机间中,容器的ip地址分配和访问,所以,如果希望Docker跨主机访问,最简单的方式就是将不同主机的docker0 设置为同一网段。

整体网络拓扑结构就是这样:
这里写图片描述

但是通过这种桥接,所有网卡都要在一个网段下,所以要对每个Docker守护进程对ip的分配做出限制:

下面,我们就来实现这个结构:

两台Ubuntu 的 ip:

Host1 : 10.211.55.3 网卡:eth0

Host2 :10.211.55.5 网卡 eth1

网关:10.211.55.1

对容器ip的划分:

Host1: 10.211.55.64/26

  地址范围: 10.211.55.65~10.211.55.126

Host2: 10.211.55.128/26

  地址范围: 10.211.55.129~10.211.55.190

需要的操作:

以下,以Host1 为例,Host2 上操作相似,只是网卡名字不一样,我在这里,没有我们不使用默认的docker0 网桥,而是自己新建一个网桥:

yum install bridge-utils

1
分别在Docker主机上建立虚拟网桥:

   Host1: $ sudo brctl addbr br0

为网桥分配一个同网段ip

  Host1: $ sudo ifconfig br0 10.211.55.10 netmask 255.255.255.0

  Host2: $ sudo ifconfig br0 10.211.55.20 netmask 255.255.255.0

桥接本地网卡:

  Host1: $ sudo brctl addif br0 eth0

这里,我们就准备好了网桥设置

下面我们来修改Docker的配置,使用我们新建的网桥代替docker0:

修改 /etc/default/docker文件

  $sudo vim /etc/default/docker

添加守护进程的启动选项:

  Host1: DOCKER_OPTS=” -b=br0 –fixed-cidr=‘10.211.55.64/26‘ “

  Host2: DOCKER_OPTS=” -b=br1 –fixed-cidr=‘10.211.55.128/26‘ “
  
  这里,-b 用来指定容器连接的网桥名字

     –fixed-cidr用来限定为容器分配的IP地址范围

保存文件并重启Docker服务

  $ sudo systemctl restart docker
  
下面,就可以来验证:

1.分别在两个Host上启动一个容器

  $ docker run -it ubuntu /bin/bash
  
2.在容器中运行ping命令查看连接情况 发现是互通的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值