Docker实现跨主机容器访问流程:
- 分别在每个机器上执行命令创建网桥:
(注意:每个机器创建网桥的ip网段需不同)
(docker network create --subnet=ip网段/子网掩码 网桥名)
docker network create --subnet=172.172.0.0/24 docker-br0
- 在你自定义的网段选取任意IP地址作为你要启动容器IP:
(例如:在机器1上:docker run -i -d --net docker-br0 --ip 172.172.0.10 --name test1 centos /bin/bash
在机器2上:docker run -i -d --net docker-br0 --ip 172.172.1.10 --name test2 centos /bin/bash)
- 使用docker exec -it test1 /bin/bash 进入已启动的容器,使用 yum install net-tools 下载 iptables 然后使用ifconfig查看容器ip;
- 测试本机与容器之间是否互相ping通(ping 容器ip;ping 宿主机ip)
- 在宿主机配置路由表,实现跨主机访问:
(ip route add 对方容器所在的ip网段/子网掩码 via 对方虚拟机ip dev 通过哪个自己网卡通信)
ip route add 172.172.0.0/24 via 192.168.2.142 dev enp6s0
(添加完成之后,可以使用 route命令 查看添加之后的规则,也可以使用 ip route del 172.172.1.0/24 移除路由规则)
6.在每台宿主机上配置第五步实现不同容器之间的跨主机访问
7.添加永久路由
Ubuntu系统:在/etc下用root用户创建文件rc.local (sudo vim rc.local)
添加内容
(#!/bin/sh -e
# rc.local
route add -net 172.21.1.0 netmask 255.255.255.0 gw 192.168.2.142 dev enp0s25
route add -net 172.21.2.0 netmask 255.255.255.0 gw 192.168.2.143 dev enp0s25
route add -net 172.21.3.0 netmask 255.255.255.0 gw 192.168.2.146 dev enp0s25
exit 0)
重启电脑
Centos系统:在/etc/sysconfig/network-scripts下用root用户创建 route-enp7s0
(sudo vim route-enp7s0)添加一下内容
(172.21.2.0/24 via 192.168.2.143 dev enp7s0
172.21.3.0/24 via 192.168.2.146 dev enp7s0
172.21.4.0/24 via 192.168.2.139 dev enp7s0)
注意,centos系统需要在/usr/lib/sysctl.d/00-system.conf文件中加入
“net.ipv4.ip_forward=1”然后重启网络(service network restart)