
1、有个子网api所处的网段与docker_gwbridge网段冲突,导致docker容器无法调用api
为什么会出现当网段冲突时就无法发送http请求了,这就必须得提下docker_gwbridge的作用
docker_gwbridge接口为使用多主机群覆盖网络的所有容器和任务提供默认网关功能。它是在每个Docker主机上创建的,当它们加入集群时。
docker_gwbridge是一个本地桥接网络,在以下两种情况会自动创建:
(1)初始化或者加入一个 swarm 集群时,用来在不同 hosts 主机的不同节点间进行通信;
(2)再容器中的所有网络都不能访问外部时,Docker 会将docker_gwbridge网络加入到容器中,用来访问外部网络或者其他的集群节点。
网关的作用就是网络转发,所以172.18请求在本地的docker_gwbridge虚拟网关拦截后就会进入虚拟网段中,导致无法向外转发网络请求

1、要删除docker_gwbridge这个网络,但是一般是无法直接删除的,因为被很多容器使用,可以通过docker network inspect docker_gwbridge查看被哪些容器占用

2、断开这个容器与docker_gwbridge网络的连接,执行命令
docker network disconnect docker_gwbridge gateway_58c774b3bf06 -f
其中gateway_58c774b3bf06为上图中Container中Name字段数据
3、等到docker network inspect docker_gwbridge为空时执行命令docker network rm docker_gwbridge删除该网关
4、创建docker_gwbridge网关并指定网段
docker network create \ --subnet 10.20.0.0/20 \ --gateway 10.20.0.1 \ -o com.docker.network.bridge.enable_icc=false \ -o com.docker.network.bridge.name=docker_gwbridge \ docker_gwbridge
上述修改在网段冲突的swarm节点执行