不同容器之間的通信可以借助于 pipework 這個工具
pipework是由Docker的工程師Jérme Petazzoni開發的一個Docker網絡配置工具,由200多行shell實作,友善易用。
<code>[root@localhost src]</code><code># unzip pipework-master.zip</code>
<code>[root@localhost src]</code><code># cp -p pipework-master/pipework /usr/local/bin/</code>
安裝相應依賴軟體
<code>yum </code><code>install</code> <code>bridge-utils -y </code>
<code>[root@localhost src]</code><code># docker load < centos7http.tar</code>
<code>[root@localhost src]</code><code># yum -y install docker</code>
配置橋接網絡
<a href="https://s2.51cto.com/wyfs02/M01/A2/7D/wKioL1mgNe-ycPdgAAAjwJeZ-ME166.png-wh_500x0-wm_3-wmp_4-s_1830487732.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/A2/7D/wKioL1mgNfCywf5HAAAKdo7uCag583.png-wh_500x0-wm_3-wmp_4-s_3164886256.png" target="_blank"></a>
<code>[root@localhost src]</code><code># systemctl restart network</code>
<a href="https://s2.51cto.com/wyfs02/M00/03/CC/wKiom1mgNhKScuBTAABAOkJBNAo213.png-wh_500x0-wm_3-wmp_4-s_612130269.png" target="_blank"></a>
把 docker 的橋接指定為 br0,這樣跨主機不同容器之間通過 pipework 建立 docker 容器的網卡橋接到 br0,這樣跨主機容器之間就可以通信了。
<code>[root@localhost src]</code><code># systemctl stop docker</code>
<code>OPTIONS=</code><code>'--selinux-enabled --log-driver=journald --signature-verification=false -b=br0'</code> <code>添加</code>
<code>[root@localhost src]</code><code># systemctl start docker</code>
pipework
把 docker 預設橋接指定到了 br0,則最好在建立容器的時候加上--net=none,防止自動配置設定的 IP 在區域網路中有沖突。
<code>[root@localhost src]</code><code># pipework</code>
使用鏡像運作一個容器
<code>[root@localhost src]</code><code># docker run -dit --net=none centos7:http</code>
<code>230f28d287a9013b7b660e1b57831c65b82c5338dfafdc16871fe6e0ccc7e150</code>
注:預設不指定網卡裝置名,則預設添加為 eth1
<code>[root@localhost ~]</code><code># pipework br0 -i eth0 230f28d287a 192.168.100.50/[email protected]</code>
注:另外 pipework 不能添加靜态路由,如果有需求則可以在 run 的時候加上 --privileged=true 權限在容器中手動添加,但這種安全性有缺陷,可以通過 ip netns 操作 密碼預設是 admin
<code>[root@localhost ~]</code><code># ssh [email protected]</code>
<a href="https://s3.51cto.com/wyfs02/M00/03/CC/wKiom1mgNsXBx6BgAABDbhOuDSg035.png-wh_500x0-wm_3-wmp_4-s_1739739105.png" target="_blank"></a>
通路容器提供的web服務:
<a href="https://s1.51cto.com/wyfs02/M02/A2/7D/wKioL1mgNsbwTKGbAABI-nw2pp0109.png-wh_500x0-wm_3-wmp_4-s_3971243248.png" target="_blank"></a>
使用ip netns添加靜态路由,避免建立容器使用--privileged=true選項造成一些不必要的安全問題:
<code>[root@localhost ~]</code><code># docker inspect --format="``.`State`.`Pid`" 230f28d287a9</code>
<code>19440</code>
<code>[root@localhost ~]</code><code># ln -s /proc/19440/ns/net /var/run/netns/19440</code>
<code>[root@localhost ~]</code><code>#</code>
本文轉自柴鑫旺 51CTO部落格,原文連結:http://blog.51cto.com/chaixinwang/1959621,如需轉載請自行聯系原作者