docker网络冲突解决(修改docker_gwbridge网段)

1·问题

一次生产搭建服务的时候,出现客户端服务器到docker服务断开不通的情况,在docker服务器上抓包可以抓到客户端服务器的包,但是docker服务器不做任何响应

于是ip route 查看本地路由,发现客户端服务器的IP是172.18.X.X,属于docker的docker_gwbridge子网范围,于是并没有走本机的网卡,而是走了docker swarm的网络

查了资料  发现docker_gwbridge默认就是使用172.18.0.0/16作为子网范围,所以只能去手动更改docker_gwbridge的网段,避开我们的客户服务器网段

2·解决

2.1·第一步:删除docker_gwbridge

删除之前需要将容器都停掉,不然无法删除,因为有容器在使用网络

容器停掉之后,进行删除,执行命令:docker network rm docker_gwbridge

你会发现依然报错说有节点在使用,用下面命令查看谁在使用docker_gwbridge

docker network inspect docker_gwbridge

找到之后将其断开连接:docker network disconnect -f docker_gwbridge gateway_ingress-sbox

然后再次执行删除命令就可以删除了: docker network rm docker_gwbridge

2.2·第二步:新建docker_gwbridge

使用如下命令创建新的docker_gwbridge,我这里选的网段是192.168.16.0/24

docker network create --subnet 192.168.16.0/24
--opt com.docker.network.bridge.name=docker_gwbridge
--opt com.docker.network.bridge.enable_icc=false
--opt com.docker.network.bridge.enable_ip_masquerade=true
docker_gwbridge

这里顺便讲一下如何修改docker0网桥的网段修改方法(一般默认是172.17.0.1/16),只需要修改/etc/docker/daemon.json文件中的bip配置就可以了

vim /etc/docker/daemon.json 修改如下:

{
"bip": "172.17.10.1/24",
"default-address-pools":[
{"base":"192.168.20.0/20","size":24}
]
}

这样处理完之后,就会发现docker0和docker_gwbridge两个网桥的网段都已经改成我们想要的了。客户端服务器也可以正常访问docker的服务了

原文地址:https://www.cnblogs.com/lcword/p/15193578.html