最近在研究Docker,Docker的网络配置是比较令人头疼的部分,尤其是跨主机的容器间通信,很多解决方案都比较复杂,这里,我只用虚拟网桥来实现Docker的跨主机访问,分享出来,希望对Docker学习的各位有一定的启发。

基本思想:

由于Docker容器通过docker0 网桥实现同一主机间中,容器的ip地址分配和访问,所以,如果希望Docker跨主机访问,最简单的方式就是将不同主机的docker0 设置为同一网段。

那么怎么实现跨主机呢?我这里将本机网卡也通过网桥来连接,那么,整体网络拓扑结构就是这样:

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

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

我的两台Ubuntu 14.04 的虚拟机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 网桥,而是新建了虚拟网桥

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

   Host1: $ sudo brctl addbr br0

  

2. 为网桥分配一个同网段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

3. 桥接本地网卡:

  Host1: $ sudo brctl addif br0 eth0

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

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

1. 修改 /etc/default/docker文件

  $sudo vim /etc/default/docker

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

  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地址范围

3. 保存文件并重启Docker服务

  $ sudo service docker restart

下面,就可以来验证:

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

  $ docker run -it ubuntu /bin/bash

2.在容器中运行ping命令查看连接情况

  

利用虚拟网桥实现Docker容器的跨主机访问的更多相关文章

  1. Docker容器的跨主机连接

    Docker容器的跨主机连接 Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态I ...

  2. Docker学习(15) Docker容器的跨主机连接

    Docker容器的跨主机连接 Docker使用网桥跨主机容器连接 Docker使用Open cSwitch实现跨主机容器连接 Docker使用weave实现跨主机容器连接

  3. Docker 容器的跨主机连接

    使用网桥实现跨主枳容器连接 不推荐 使用OpenvSwitch实现跨主机容器连接 OpenvSwitch: OpenvSwitch是一个高质量的.多层虚拟交换枳,使用开源Apache2.0许可协议,由 ...

  4. docker容器间跨主机通信

    http://jnzg905.iteye.com/blog/2269583 https://blog.csdn.net/pingpangbing0902/article/details/7823889 ...

  5. docker容器网络—单主机容器网络

    当我们在单台物理机或虚拟机中运行多个docker容器应用时,这些容器之间是如何进行通信的呢,或者外界是如何访问这些容器的? 这里就涉及了单机容器网络相关的知识.docker 安装后默认 情况下会在宿主 ...

  6. .Net Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库

    .Net  Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库  , 一直报下面的错误 ORA-00604: error occurred at recursive SQL ...

  7. 8天入门docker系列 —— 第七天 让你的container实现跨主机访问

    当你有若干个容器之后,你可能就希望实现容器的跨机部署访问了,比如aspnetcore在一台host上,mysql在另外一个host上,如果要实现这样的功能,需要你借助 docker自带的overlay ...

  8. Docker系列04—跨主机网络方案(overlay/weave)

    在前面详细讲解了几种网络模式:none,host,bridge,container.他们解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信. 跨主机网络方案包括两大类: 1,docke ...

  9. Docker - 用Flannel跨主机

    试了下比较流行的几种SDN,感觉flannel还是比较好用,这里简单记录一下. 用的是virtualbox,3个机器,分别为: genesis : inet 192.168.99.103/24 brd ...

随机推荐

  1. 关于JAVA中String类型的最大长度

    前些天看到一道面试题,题目很容易理解:String的长度限制是多少? 针对这个题目,浏览了网友的回答,大概得到了3个层次的答案. 最浅的层次: 近似计算机内存大小的长度.这是作为一个程序员最浅显的回答 ...

  2. [python数据结构] hashable, list, tuple, set, frozenset

    学习 cs212 unit4 时遇到了 tuple, list, set 同时使用的问题,并且进行了拼接.合并操作.于是我就被弄混了.所以在这里进行一下总结. hashable and unhasha ...

  3. 地址栏输入url按回车之后发生了什么

    地址栏输入url按回车之后发生了什么? 1.我们在浏览器中输入网址 2.浏览器到DNS查找域名对应的IP地址 3. 浏览器打开TCP连接(默认端口为80),向该IP的服务器发送一条HTTP请求,如果浏 ...

  4. JavaWeb 之监听器

    1. JavaWeb 监听器概述 在 JavaWeb 被监听的事件源为: ServletContext, HttpSession, ServletRequest, 即三大域对象. 监听域对象" ...

  5. 谷歌浏览器input中的text 和 button 水平对齐的问题

    方法一  text 的vertical-align :top; 方法二  button的vertical-align: middle;

  6. payload有效载荷(转)

    payload 记载着信息的那部分数据.通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如这一批数据量的大小,校验位等,这样就相当于给已经 ...

  7. JAVA项目中常用的异常知识点总结

    JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ...

  8. 如何用好 Google 等搜索引擎

    1: 双引号短语搜索2: 减号减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词例如:搜索 -引擎返回的则是包含“搜索”这个词,却不包含“引擎”这个词的结果3: 星号RE,通配符4: intit ...

  9. List contents of directories in a tree-like format

    Python programming practice. Usage: List contents of directories in a tree-like format. #!/usr/bin/p ...

  10. js文件操作

    IE下 1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码代码如下: Var fso=new ActiveXObject(Scripting.FileSys ...