docker-compose 桥接模式指定网段
问题描述
在服务器连接一个172.19.xx.xx 的服务器时,总是失败,提示host unreachable
,但指定网卡eth0访问是通的,如图
说明是访问该ip时,默认走了一个网卡,该服务器网卡如图,eth0,docker0,br-xxxx
,br-xxx 网卡的ip是172.19.0.1/16,和目标ip是同一网段,通过route -n
查看路由表,可以看到,目标ip 访问时走了 br-xxx 网卡,于是新增一条路由,将目标ip的流量,路由到eth0网卡,设置完成后,再次访问,可以看到日志中,是通过eth0访问的,但是依然不通
解决问题
试了很久,没能通过新增路由解决问题,于是排查br-xxxx
网卡出现的原因,该服务器上起了docker ,并通过docker-compose 管理容器,docker0网卡 明显是docker 创建的虚拟网卡,但是br-xxxx
是怎么来的,查看docker-compose.yml文件,看到walle 的网络配置没有driver为bridge
模式,但没有指定网段,所以br-xxx
为docker-compose 创建的网卡,并自行决定了网段,恰好该网段的路由策略和我要访问的目标ip重合,所以走了br-xxxx
网卡,导致了上述问题
找到问题后,就着手处理,我们只需要指定容器的网段,比免冲突即可
docker-compose 管理的容器有两种指定网段的方式
- 在docker-compose.yml文件中指定
docker-compose down
停止并移除容器 ,修改网络配置如图,docker-compose up -d
重新创建并启动容器即可
2. 修改docker 配置,指定网段systemctl stop docker
停止 docker 进程, 修改/etc/docker/daemon.json
内容如下,添加网络地址池的配置,systemctl start docker
启动docker, docker-compose down
停止并移除容器 ,docker-compose up -d
重新创建并启动容器即可
再看路由表,可以看到,br-xxxx
路由的网段已经改变
再访问目标ip 就可以了
参考
https://www.cnblogs.com/lemon-le/p/10531449.html
https://juejin.im/post/6844903976534540296