利用虚拟网桥实现Docker容器的跨主机访问

最近在研究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命令查看连接情况

  

时间: 2024-09-28 19:02:32

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

Docker容器的跨主机访问

Docker容器的跨主机访问 使用网桥实现跨网段访问 主机1 :192.168.22.101  主机2:192.168.22.102 安装网桥管理工具#sudo apt-get install bridge-until 配置网卡地址# sudo vim /etc/network/interfaces 配置其中一块网卡的网络参数,另一块网卡配置参数一样,这里不在演示 重新启动网卡 # sudo /etc/init.d/networking restart 查看网络配置,发现eth0已经没有地址而b

Docker容器的跨主机连接

Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态IP地址 1.auto br02.iface br0 inet static3.address 10.211.55.34.netmask 255.255.255.05.gateway 10.211.55.16.bridge_ports eth0 修改/etc/default/docker文件,限定分配IP地址段,防止冲突 1.-b

Cacilo实现Docker容器的跨主机连接

Cacilo // 1 #Cacilo的安装 2 #将可执行文件加到系统路径下即可 3 wget http://www.projectcalico.org/builds/calicoctl 4 chmod a+x calicoctl 5 cp calicoctl /usr/local/bin // #启动Etcd服务 见前面博客的各种启动Etcd服务的方法 #集群两个主机的IP:192.168.108.131 192.168.108.132 # //

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

当你有若干个容器之后,你可能就希望实现容器的跨机部署访问了,比如aspnetcore在一台host上,mysql在另外一个host上,如果要实现这样的功能,需要你 借助docker自带的overlay网络模型了. 一: overlay网络模型 要想快速的搭建overlay网络,你可以通过docker默认的swarm集群给你默认生成的名ingress的overlay网络,这样会默认开放一些端口供底层机器内的访问,比如: UDP 4789 是用于overlay network 流量传输的,作为开发角

Docker - 用Flannel跨主机

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

Docker容器跨主机通信之:直接路由方式

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

如何实现跨主机之间docker容器通信问题

这里采用最原始的桥接模式来实现跨主机直接docker容器通信问题 一些常用命令 brctl show br0 brctl addbr br0 brctl addif br0 eth0 ifconfig br0 down 1.先安装brctl工具包 apt-get install bridge-utils 2.创建一个docker的桥接网络类型(ip填写和同主机网段的ip) docker network create --subnet=192.168.17.100/16 br0 这里我的宿主机ip

Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)

自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信.下面将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker.前面已经在Docker容器学习梳理--基础知识(2)这一篇中详细介绍了Docker的网络配置以及pipework工具. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的

docker6 构建docker容器集群

十五.构建docker集群 让不同主机中的docker容器可以互相访问. 本章介绍几种解决方案,包括利用端口映射实现容器之间的快速互联,使用Ambassador容器解决跨主机的容器互联. 15.1 使用自定义网桥连接跨主机容器 docker默认的网桥是docker0,它只会在本机连接所有的容器. 容器的虚拟网卡在主机上看一般叫做veth*而docker0网桥把所有这些网卡桥接在一起. 可以把这个网络看成是一个私有的网络,如果要让外网连接到容器中,就需要做端口映射,即-p参数. 15.2 使用Am