参考文章
环境配置
两台主机
主机名 | IP | 容器网段 | 系统 |
---|---|---|---|
bd223 | 10.1.24.223 | 1.2.3.4 | centos6 |
bd225 | 10.1.24.225 | 1.2.2.4 | centos6 |
安装配置docker
Docker安装完之后,默认会创建一个docker0的网桥,启动的Docker容器网段是172.17.0.1/16,如果不做调整,两台Docker主机上的容器,就可能出现IP地址冲突,所以我们先将默认docker0网桥的地址按【主机配置及IP信息】中规划的进行调整。
在bd223中创建/etc/docker/daemon.json文件,内容如下
[root@bd223 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"],
"bip":"1.2.3.4/24"
}
重启docker服务
systemctl restart docker
重启完成后,就会发现docker0的ip已经调整过了
[root@bd223 ~]# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 1.2.3.4 netmask 255.255.255.0 broadcast 1.2.3.255
ether 02:42:e3:27:18:3b txqueuelen 0 (Ethernet)
RX packets 4664 bytes 324748 (317.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4974 bytes 12786007 (12.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
通过同样的方法设置bd225
主机的docker网络。
创建并进入docker容器
在bd223
中执行如下命令创建一个docker223
的容器,并查看ip和网关信息
[root@bd225 ~]# docker run --name docker223 -it centos /bin/bash
[root@d2e1b07e6015/]# yum install -y net-tools
[root@d2e1b07e6015 /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 1.2.3.1 netmask 255.255.255.0 broadcast 1.2.3.255
ether 02:42:01:02:03:01 txqueuelen 0 (Ethernet)
RX packets 17 bytes 1410 (1.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 24 bytes 1730 (1.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@d2e1b07e6015 /]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 1.2.3.4 0.0.0.0 UG 0 0 0 eth0
1.2.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
可以看出,容器的ip为1.2.3.1
,网关为1.2.3.4
。
同理,在bd225
中也执行如上命令
[root@bd225 ~]# docker run --name docker223 -it centos /bin/bash
[root@f8d11695e0d0/]# yum install -y net-tools
[root@f8d11695e0d0 /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 1.2.2.1 netmask 255.255.255.0 broadcast 1.2.2.255
ether 02:42:01:02:02:01 txqueuelen 0 (Ethernet)
RX packets 7 bytes 574 (574.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7 bytes 574 (574.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@f8d11695e0d0 /]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 1.2.2.4 0.0.0.0 UG 0 0 0 eth0
1.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
可以看出,容器的ip为1.2.2.1
,网关为1.2.2.4
。
相互添加路由
原理非常简单,就是通过互相指定到达对方容器的路由;
在bd223主机添加到1.2.2.0/24网段的路由,指向bd225的IP:10.1.24.225;
在bd225主机添加到1.2.3.0/24网段的路由,指向bd223的IP:10.1.24.223;
在bd223
主机上运行如下命令
[root@bd223 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.24.254 0.0.0.0 UG 100 0 0 ens160
1.2.3.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
10.1.24.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
172.31.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4b161907f01d
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@bd223 ~]# route add -net 1.2.2.0/24 gw 10.1.24.225
[root@bd223 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.24.254 0.0.0.0 UG 100 0 0 ens160
1.2.2.0 10.1.24.225 255.255.255.0 UG 0 0 0 ens160
1.2.3.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
10.1.24.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
172.31.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4b161907f01d
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
在bd225
主机上运行如下命令
[root@bd225 local]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.24.254 0.0.0.0 UG 100 0 0 ens160
1.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
10.1.24.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f87c6fa2c8b9
[root@bd225 ~]# route add -net 1.2.3.0/24 gw 10.1.24.223
[root@bd225 local]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.24.254 0.0.0.0 UG 100 0 0 ens160
1.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
1.2.3.0 10.1.24.223 255.255.255.0 UG 0 0 0 ens160
10.1.24.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f87c6fa2c8b9
然后两个容器之间就可以相互ping通了