操作环境:
Docker版本:Docker version 1.12.6, build ec8512b/1.12.6
Docker宿主操作系统:CentOS Linux release 7.3.1611
1、安装支持软件
配置网桥需要安装 bridge-utils、 pipework,安装如下:
[root@localhost zhpt]# yum install bridge-utils
Loaded plugins: fastestmirror, langpacks
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 6.7 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 3.4 kB 00:00:00
pgdg96 | 4.1 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo | 861 kB 00:00:11
(2/2): epel/x86_64/primary_db | 6.2 MB 00:00:04
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirror01.idc.hinet.net
* extras: mirrors.aliyun.com
* updates: mirrors.sohu.com
Package bridge-utils-1.5-9.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost zhpt]#git clone https://github.com/jpetazzo/pipework
Cloning into 'pipework'...
remote: Counting objects: 501, done.
remote: Total 501 (delta 0), reused 0 (delta 0), pack-reused 501
Receiving objects: 100% (501/501), 172.97 KiB | 0 bytes/s, done.
Resolving deltas: 100% (264/264), done.
[root@localhost zhpt]#cp pipework/pipework /usr/local/bin/
2、停止Docker服务
[root@localhost zhpt]# systemctl stop docker.service
3、删除docker0网桥
[root@localhost zhpt]# ip link set dev docker0 down //关闭docker0网桥
[root@localhost zhpt]# brctl delbr docker0 //删除docker0网桥
4、编辑宿主机器网卡配置文件
目前宿主机器的网卡为 em1
[root@localhost zhpt]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vi ifcfg-em1
1 TYPE=Ethernet
2 BOOTPROTO=none
3 DEFROUTE=yes
4 IPV4_FAILURE_FATAL=no
5 IPV6INIT=no
6 IPV6_AUTOCONF=yes
7 IPV6_DEFROUTE=yes
8 IPV6_FAILURE_FATAL=no
9 IPV6_ADDR_GEN_MODE=stable-privacy
10 NAME=em1
11 UUID=c5088dd0-1e56-4997-89c5-7e8a3027fefc
12 DEVICE=em1
13 ONBOOT=yes
14 DNS1=211.136.192.6
15 DNS2=211.136.20.203
16 HWADDR=10:98:36:B4:81:01
17 IPV6_PEERDNS=yes
18 IPV6_PEERROUTES=yes
19 IPV6_PRIVACY=no
20 IPADDR=10.122.111.110
21 PREFIX=24
22 GATEWAY=10.122.111.222
23 BRIDGE=br0 //设置桥接br0
5、新增自定义网桥设置
工作目录为 /etc/sysconfig/network-scripts,新建文件 ifcfg-br0,如下
[root@localhost network-scripts]# vi ifcfg-br0
1 DEVICE=br0
2 TYPE=Bridge
3 BOOTPROTO=static
4 ONBOOT=yes
5 DELAY=0
6 STP=yes
7 IPADDR=10.122.111.110
8 NETMASK=255.255.255.0
9 GATEWAY=10.122.111.222
10 DNS1=211.136.192.6
11 DNS2=211.136.20.203
6、关闭、停止、重启 相关服务
[root@localhost zhpt]# systemctl stop NetworkManager
[root@localhost zhpt]# systemctl disable NetworkManager
[root@localhost zhpt]# systemctl restart network
7、查看虚拟网桥是否设置成功
bridge name bridge id STP enabled interfaces
br0 8000.109836b48101 yes em1
8、设置docker服务启动参数
不同的linux操作系统docker的配置文件所在不同,centos 在/etc/sysconfig/docker,主要修改是
在 “--selinux-enabled ” 后添加 “ -b=br0” 指定网桥设置,如下图。
[root@localhost zhpt]# vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled -b=br0 --log-driver=journald --signature-verification=false'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/docker
fi
9、启动Docker服务
[root@localhost zhpt]# systemctl start docker.service
10、启动一个手动设置网络的容器
这里最好不要让docker自动获取ip,下次启动会有变化而且自动获取的ip可能会和物理网段中的ip冲突。
[root@localhost zhpt]# docker run -itd --net=none --name=ruoli_test docker.io/centos /bin/bash
84a6405887b4cb7908f766e8d1ea186b033227984655b97be001b01ad26b2a0a
11、为名称为ruoli_test的容器设置一个与桥接物理网络同地址段的ip
设置格式为 ip@网关
[root@localhost zhpt]# pipework br0 ruoli_test 10.122.111.71/24@10.122.111.222
12、进入ruoli_test 容器
[root@localhost zhpt]# docker attach ruoli_test
[root@84a6405887b4 /]# ping www.baidu.com
PING www.a.shifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=1 ttl=55 time=8.79 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=2 ttl=55 time=8.73 ms
此时此容器已经可以与其他服务器进行互联。