通过路由实现跨主机Docker容器互通

参考文章

实战|两种常用的跨主机Docker容器互通方法

环境配置

两台主机

主机名 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通了

发布了26 篇原创文章 · 获赞 1 · 访问量 6957

猜你喜欢

转载自blog.csdn.net/qq_39800434/article/details/105050700