docker-compose 桥接模式指定网段

问题描述

在服务器连接一个172.19.xx.xx 的服务器时,总是失败,提示host unreachable ,但指定网卡eth0访问是通的,如图
docker-compose 桥接模式指定网段_第1张图片
说明是访问该ip时,默认走了一个网卡,该服务器网卡如图,eth0,docker0,br-xxxx,br-xxx 网卡的ip是172.19.0.1/16,和目标ip是同一网段,通过route -n 查看路由表,可以看到,目标ip 访问时走了 br-xxx 网卡,于是新增一条路由,将目标ip的流量,路由到eth0网卡,设置完成后,再次访问,可以看到日志中,是通过eth0访问的,但是依然不通
docker-compose 桥接模式指定网段_第2张图片

解决问题

试了很久,没能通过新增路由解决问题,于是排查br-xxxx网卡出现的原因,该服务器上起了docker ,并通过docker-compose 管理容器,docker0网卡 明显是docker 创建的虚拟网卡,但是br-xxxx是怎么来的,查看docker-compose.yml文件,看到walle 的网络配置没有driver为bridge模式,但没有指定网段,所以br-xxx为docker-compose 创建的网卡,并自行决定了网段,恰好该网段的路由策略和我要访问的目标ip重合,所以走了br-xxxx网卡,导致了上述问题
在这里插入图片描述

找到问题后,就着手处理,我们只需要指定容器的网段,比免冲突即可
docker-compose 管理的容器有两种指定网段的方式

  1. 在docker-compose.yml文件中指定

docker-compose down 停止并移除容器 ,修改网络配置如图,docker-compose up -d 重新创建并启动容器即可
docker-compose 桥接模式指定网段_第3张图片
2. 修改docker 配置,指定网段
systemctl stop docker 停止 docker 进程, 修改/etc/docker/daemon.json 内容如下,添加网络地址池的配置,systemctl start docker 启动docker, docker-compose down 停止并移除容器 ,docker-compose up -d 重新创建并启动容器即可
docker-compose 桥接模式指定网段_第4张图片
再看路由表,可以看到,br-xxxx路由的网段已经改变
docker-compose 桥接模式指定网段_第5张图片
再访问目标ip 就可以了
docker-compose 桥接模式指定网段_第6张图片

参考

https://www.cnblogs.com/lemon-le/p/10531449.html
https://juejin.im/post/6844903976534540296

你可能感兴趣的:(运维组件,网络,docker-compose,网卡,路由表)