docker容器的跨主機通信有好多種方案,此處用的是橋接物理網卡的方式實現的;
一、新建網卡,並橋接物理網卡;
在宿主機上新建一個網卡,並橋接物理網卡,可以使用 nm-connection-editor 命令進入圖形化界面進行配置,也可以用 nmcli connection 命令的方式配置,還可以使用 在/etc/sysconfig/network-scripts/下編輯配置文件的方式進行配置;
爲了快速方便,此處使用 nmcli connection 命令的方式進行配置:
1、創建新網卡;
nmcli connection add type bridge con-name bridge1 ifname br_1
#bridge1 和 br_1 是網卡名字,可以隨便寫;
2、修改網卡參數;
nmcli connection modify bridge1 ipv4.addresses 192.168.139.200/24 ipv4.gateway 192.168.139.2 ipv4.method manual
#ipv4.addresses是宿主機網段中的一個ip,可以和宿主機ip相同,爲了搶佔宿主機的網卡使用權;
#ipv4.gateway是宿主機的網關,不知道的可以 route -n 看下;
#ipv4.method 是設置該網卡爲手動,即:不需要自動獲取ip;
3、配置橋接;
nmcli connection add type bridge-slave ifname ens33 con-name br-slave master br_1
#ifname 是宿主機的物理網卡;
#br-slave 是橋接的網卡,可以隨便寫;
#br_1 是上面創建的網卡;
4、執行結果;
5、需要 systemctl restart network 重啓網卡;
重啓後 ssh 192.168.139.200 進行連接;通過 ip a 命令可以看到:
原有的物理網卡 ens33 沒有了ip,創建的 br_1 是我們設定的ip;再通過 brctl show 查看:
br_1橋接到了原有的物理網卡ens33上;但此時如果你ping百度的話應該是不通的,根據錯誤進行排查是路由問題還是dns問題:
6、配置好橋接網絡再進行以下步驟;
二、下載pipework工具,並配置環境變量;
1、pipework工具github鏈接: https://github.com/jpetazzo ;你會發現大神總有與衆不同的地方,膜拜......
2、執行git命令拉取,並配置環境變量:
git clone https://github.com/jpetazzo/pipework
cp ./pipework/pipework /usr/local/bin/
ok,現在可以使用 pipework 這個命令工具了;
三、運行一個容器並使用none網絡模式;
1、大家都知道docker容器有三種網絡模式: bridge、host、none,具體作用此處不再多述;
2、創建一個none網絡的容器:
docker run -it --network none --name pipework_test centos:full /bin/bash
none網絡是隻有lo網卡的;
四、使用pipework進行配置容器 pipework_test 的ip地址;
1、 執行命令給容器配置ip:
pipework bridge0 pipework_test 192.168.139.210/[email protected]
#192.168.139.210是給容器配置的ip,應考慮避免網段中是否已有該ip;
#192.168.139.2是網關,也就是宿主機網關;
五、測試通信;
到容器中查看:
多出來一個eth1的網卡;
ok;再來看一下路由和dns:
正常;
最後ping一下百度:
ok;到此完畢;
- 注: 容器重啓後會導致pipework配置的ip消失;
- 可以通過shell腳本進行自動化ip的配置,具體看個人應用情況了;