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容器看看,发现容器仍是不能跟外部机器访问,只能在同网段内访问

    此时须要查看宿主机的网络是否开启了网络的混杂模式,通常服务器都默认关闭混杂模式的,这个坑找了很久

相关文章
相关标签/搜索