在公司一个环境CentOS7上安装完docker后,发现windows上 xshell的ssh突然断开无法连接,需要经过和服务器同网段的其他机器才能ssh上去。
经排查,原来此环境windows机器的IP 为172.17.79.88,安装docker(1.13.0)后docker创建了一个虚拟网络桥连,恰好也使用了172.17.1.0/16的网段,172.17.79.88直接找到了docker的网段IP(172.17.0.1),而部署目标服务器IP,从而导致无法通过Xshell ssh上目标服务器!
既然找到了原因,我们就让docker避开172.17.18.0/24网段,改成172.20.1.0/16,也避免与一般的家用路由器IP段相撞。
docker0: mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:6c:a8:3d:34 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
局域网保留地址:
A类:10.0.0.0/8 10.0.0.0~10.255.255.255
B类:172.16.0.0/12 172.16.0.0~172.31.255.255
C类:192.168.0.0/16 192.168.0.0~192.168.255.255
1.修改配置文件
# vim /etc/default/docker
#添加1行:
DOCKER_OPTS="--bip=172.20.1.0/16"
#vim /etc/systemd/system/docker.service
# 如果docker.service文件不存在,则看 /lib/systemd/system/docker.service
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
2.重启docker
# systemctl restart docker
3.如果docer已经初始化为了docker集群,那么需要拆掉swarm集群,删除各个节点相应的
gw_bridge,然后重建gw_bridge
# docker swarm leave
# docker swarm leave --force
# docker network rm gw_bridge
docker swarm无法创建默认的gw_bridge
公司将172相关网段预占用,手动创建,需要指定subnet
# docker network create --driver=bridge --subnet 172.21.0.1/24 docker_gwbridge
这样就可用正常使用docker service create创建服务了。
该网段被占用可能导致的另外一个问题就是,docker run一个容器的时候提示:
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: failed to parse pool request for address space "LocalDefault" pool "" subpool "": could not find an available predefined network
解决办法,通过指定--bip启动docker daemon。