docker 容器靜態IP配置

爲了便於docker容器跟非宿主機的網絡通信,對比了幾中實現方式的區別:linux

實現方式docker

描述服務器

實現依賴網絡

           優勢ssh

           缺點性能

NATui

端口映射,對外訪問使用宿主機IPspa

不須要依賴任何插件.net

直接同宿主機鏈接,網絡性能較好插件

只能單機部署,不能同時存在多個相似壞境

weave

使用weave爲docker設置IP

 

Docker自身功能

性能折損大

Overlay

Docker 1.9版本自帶

通常須要一個全局的K-V store(sdn controller、etcd、consul)來保存控制信息

部署極其方便

性能折損較大

路由

Docker插件calico/fannel實現

安裝網絡插件外,不依賴於其餘網絡設備,能夠創建獨立的網絡環境

性能好,每一個容器可設置獨立於辦公網絡的IP

每一個容器都須要一條路由記錄,當容器太多時,對於路由是必定的壓力

Linux bridge

將docker網絡橋接到宿主機的網絡

不須要依賴任何插件

           

配置、查找問題簡單

IP資源消耗大,須要依賴辦公網現有的網絡設備

鑑於以上,選擇linux bridge 實現網絡直接的通信.,此方式借鑑於PPTV的網絡模式,使得docker容器共享宿主機網段網絡,最好是建立一個網段專門適用於docker容器,不然就有點浪費IP資源。

Linux bridge網絡拓撲結構以下:

大概的寫一下幾個主要的命令,以及我操做時遇到的問題和當時的解決方法:

建立docker network:
 docker network create --gateway=10.X.X.X --subnet=10.X.X.0/24 -o com.docker.network.bridge.name=br0 --aux-address "DefaultGatewayIPv4=10.X.X.2"  dockernet  

gateway 建議設置成宿主機的IP,其中br0爲Linux橋接網絡,DefaultGatewayIPv4爲你要設置網段的網關。

1.設置完成後檢查網絡是否鏈接OK,通常沒法鏈接的狀況有:Linux橋接網絡設置失敗.

以下爲Linux網關丟失,

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.x.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 br0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

網關丟失時手動添加網關:route add default gw 10.X.X.2

2.網絡鏈接成功後,再啓動容器時指定網絡:再啓動docker容器來看看
 docker run -itd --net=dockernet --ip=10.x.x.x ssh

通常啓動警告:WARNING IPv4 forwarding is disabled. Networking will not work

解決辦法:
# vi /etc/sysctl.conf
添加以下代碼:
    net.ipv4.ip_forward=1
 
重啓network服務
# /etc/init.d/network restart
 
查看是否修改爲功
# sysctl net.ipv4.ip_forward
 
若是返回爲「net.ipv4.ip_forward = 1」則表示成功了

3.再次啓動docker容器看看,發現容器仍是不能跟外部機器訪問,只能在同網段內訪問

    此時須要查看宿主機的網絡是否開啓了網絡的混雜模式,通常服務器都默認關閉混雜模式的,這個坑找了很久

相關文章
相關標籤/搜索