使用直接路由方式实现docker容器跨物理主机通信

实现docker容器跨物理主机通信
方法 : 直接路由方式
网络环境:
node1 主机ip 173.16.20.201 docker0网卡ip172.17.0.1 , nginx容器ip 172.17.0.2
node1 主机ip 173.16.20.202 docker0网卡ip172.17.0.1, redis容器ip 172.17.0.2

环境准备:
node1 主机上运行一个nginx容器
# docker run -d -p 80:80 --name nginx nginx:latest
# docker inspect nginx |grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

node2主机上运行一个redis容器
# docker run -d -p 6379:6379 -v /redisdata:/data -d --name redis redis:latest redis-server --appendonly yes
# docker inspect redis |grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
我们可以看到node1,node2 两个主机上的docker0 ip、容器ip相同,这样是不行的, 我们需要更改docker0网络

实现方法

1、 修改node1,node2主机的Docker0网桥默认网络ip
以node1主机为例,修改node1主机的docker0网卡ip为192.168.201.1
修改文件 /etc/docker/daemon.json 添加内容 "bip": "ip/netmask" [ 切勿与宿主机同网段 ]
{

"registry-mirrors": ["https://aa25jngun.mirror.aliyuncs.com"],
"bip": "192.168.201.1/24"

}

重启docker服务
# systemctl daemon-reload
# systemctl restart docker

按同样的方法,修改node2主机的docker0网卡的ip为 192.168.202.1

此时网络环境发生变化
node1 主机ip 173.16.20.201 docker0网卡ip192.168.201.1 , nginx 容器ip 192.168.201.2
node1 主机ip 173.16.20.202 docker0网卡ip172.17.0.1 , redis容器ip 192.168.202.2

2、 添加路由规则
node1主机添加路由
# route add -net 192.168.202.0 netmask 255.255.255.0 gw 173.16.20.202
node2主机添加路由
# route add -net 192.168.201.0 netmask 255.255.255.0 gw 173.16.20.201

3、 开启物理主机的路由转发功能
编辑 /etc/sysctl.conf 在文件末尾添加
net.ipv4.ip_forward=1
# sysctl -p

4、 容器连通性测试
登录node1主机的nginx容器,ping下node2主机的redis容器ip,看连通性如何
# docker exec -ti nginx /bin/bash
登入容器,安装ping、ifconfig 命令行工具
apt-get install inetutils-ping
apt-get install net-tools
ping 192.168.202.2
测试容器是可以ping通的。

相关新闻

联系我们

全国服务热线

400-033-9553

电子邮件:admin@example.com
工作时间:09:00-17:00 周一至周五

在线客服
关注微信
关注微信
分享本页
返回顶部