在同一宿主機下的Docker的容器之間是默認互相聯通的。通過docker inspect id或name可以查看到ip地址。在不同的容器中來執行ping是可以ping通的,然而跨容器則行不通,於是總結了以下3種方法
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
1)以下,以Host1 爲例,Host2 上操作相似,只是網卡名字不一樣,我們不使用默認的docker0 網橋,而是自己新建一個網橋:
首先安裝網橋管理工具 apt-get install bridge-utils
分別在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
這裏,我們就準備好了網橋設置
2)下面我們來修改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 service docker restart
3) 驗證
1.分別在兩個Host上啓動一個容器
$ docker run -it ubuntu /bin/bash
2.在容器中運行ping命令查看連接情況 發現是互通的。
第二種:Open vSwitch
簡稱OVS是一個虛擬交換軟件.目的是讓大規模網絡自動化可以通過編程擴展。
先看一下實現這種方式的連接所具備的條件:
1.雙網卡,Host-Only & NAT
2.安裝Open vSwitch: apt-get install openvswitch-switch
操作步驟:
1.在虛擬機中建立ovs網橋
2.添加gre連接
3.配置docker容器虛擬網橋
4.爲虛擬網橋添加ovs接口
5.添加不同Docker容器網段路由
具體執行的一些命令如下:
針對10.211.55.3設置
sudo ovs-vsctl show #ovs狀態sudo ovs-vsctl add-br obr0 #增加ovs網橋名爲obr0sudo ovs-vsctl add-port obr0 gre0 # 增加gre接口名爲obr0sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=10.211.55.5 #設置接口指定鏈接類型爲gre 並指定遠程鏈接的ipsudo ovs-vsctl show #接下來設計本機docker網橋sudo brctl addbr br0 sudo ifconfig br0 10.211.55.1 netmask 255.255.255.0 sudo brctl addif br0 obr0#爲本機網橋設置ovs網橋鏈接 sudo brctl show #最後設置爲docker網橋br0 #這樣本機就可以鏈接10.211.55.5
對於10.211.55.5要聯通10.221.55.3只需要對其設置路由表即可:
route sudo ip route add 10.211.55.0/24 via 10.211.55.5 dev eth0
第三種方法:weave
建立一個虛擬的網絡,用於將運行在不同主機的Docker容器連接起來.
要實現這種方式所需要的條件如下:
雙網卡,Host-Only & NAT
host1:10.0.2.6
host2:10.0.2.8
host1上應用容器1:192.168.0.2/24
host2上應用容器1:192.168.0.3/24
兩臺機器上均安裝Docker以及weave,並均啓動好weave路由容器
在兩臺機器上均啓動一個應用容器.可以直接使用weave run命令,也可以先使用docker run啓動好容器,然後使用weave attach命令給容器綁定IP地址
安裝好weava之後,便執行綁定:
在10.0.2.6之中:
weava launch 10.0.2.8#配置docker處於192.168.0.2/24的網段中c2=$(weava run 192.168.0.2/24 -ti ubuntu /bin/bash) docker attach $c2