两台服务器上各有一个docker,现在要两台docker服务器中的容器网络能互通:
我是用docker-compos, 首先规划网段,linux服务器A (192.168.1.100 ) 默认是172.18.0.1/16
1. linux服务器B (192.168.1.200) docker容器网段改为 172.19.0.1/16
bip 是设置docker0的ip ,就是docker run启动的容器,这里不变还是默认的
default-address-pools 是设置docker-compose 创建的容器的网络 我是用docker-compose所以重点改这里, base 172.19.0.1/16 是说从 172.19.0.1 开始分配,size就是子网掩码 16就是2个字节*8 2个255的意思
vi /etc/docker/daemon.json
{
"bip": "172.17.0.1/16",
"default-address-pools": [
{
"base": "172.19.0.1/16",
"size": 16
}
]
}
systemctl restart docker
#删除不在使用的网络 ,不然重建网络后ip不变
docker network prune
docker-compose 启动应用
2.添加静态路由(阿里云ECS 要在控制台添加,这么添加无效)
服务器A上执行:
ip route add 172.19.0.0/16 via 192.168.1.200
服务器B上执行: 意思是 访问 服务器A的docker网络要通过网关192.168.1.100转发
ip route add 172.18.0.0/16 via 192.168.1.100
3.大坑 阿里云ECS服务器 需要开启转发链,不然死活ping不通,并且静态路由得去阿里云控制台的路由表添加)
#开启转发链(阿里云默认没开启 查看 iptables -L FORWARD)
iptables -P FORWARD ACCEPT
#开机启动时要自动执行下
在 /etc/rc.d/rc.local 末尾加上 并且 要有x权限: chmod +x /etc/rd.d/rc.local :
iptables -P FORWARD ACCEPT