背景介绍
我们的项目是使用docker-compose部署的微服务,前不久对接了一个三方接口,该接口的ip地址是172.31.xx.xx,业务对接成功后刚开始运行一切正常,今天这个三方接口出现大量的调用失败情况,通过查询接口日志发现报错信息如下:No route to host (Host unreachable) executing POST http://172.31.xxx.xx。
问题排查
- 在服务器上
ping该IP,提示。 - 在网络部门的帮助下通过
route命令发现docker虚拟网卡使用了该网段。至此我们大致明白了访问不了172.31网段是因为我们的请求数据包走到docker虚拟网卡了,所以不通。
解决方案
- 方案1
直接修改
docker网桥地址,执行vim /etc/docker/daemon.json,写入:
{
"bip: "192.168.0.1/16"
}
修改完毕后执行 systemctl daemon-reload重新加载服务配置,再执行systemctl restart docker 重启docker服务。
接下来我们执行docker network inspect 网络ID查看网络配置:
网关地址并没有预想的变成
192.168.0.1/16,但是另一个使用docker run启动的容器倒是变了,这是为什么?
接下来我试图在docker-compose的git仓库中查询相关issue,功夫不负有心人,总算查询到一些线索 github.com/docker/comp…
大致意思是
docker-compose启动时会忽略bip配置,那么有什么办法可以全局修改该配置呢?
- 方案2
我们可以直接配置
default-address-pools以限定docker engine可以用的ip段。修改完毕后执行systemctl daemon-reload重新加载服务配置,再执行systemctl restart docker重启docker服务即可。
总结
这次的问题很有意思,记录下来供大家参考,水平有限,写的不好,欢迎斧正^。