一次docker默认网络配置引发的血案

105 阅读1分钟

背景介绍

我们的项目是使用docker-compose部署的微服务,前不久对接了一个三方接口,该接口的ip地址是172.31.xx.xx,业务对接成功后刚开始运行一切正常,今天这个三方接口出现大量的调用失败情况,通过查询接口日志发现报错信息如下:No route to host (Host unreachable) executing POST http://172.31.xxx.xx

问题排查

  • 在服务器上ping该IP,提示。 1f445656435d43ba81b264f3b34e769a
  • 在网络部门的帮助下通过route命令发现docker虚拟网卡使用了该网段。 68852a806d7f4115ab81244f152d9c8c 至此我们大致明白了访问不了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查看网络配置: d6b4c40463044cdf9524c3be2736690b 网关地址并没有预想的变成192.168.0.1/16,但是另一个使用docker run启动的容器倒是变了,这是为什么? 接下来我试图在docker-composegit仓库中查询相关issue,功夫不负有心人,总算查询到一些线索 github.com/docker/comp… 340c2c944dab469b85d57c088dd21203 大致意思是docker-compose启动时会忽略bip配置,那么有什么办法可以全局修改该配置呢?

  • 方案2 ea08d2fd749a46fca93ec62a3a3aea00 我们可以直接配置default-address-pools以限定docker engine可以用的ip段。修改完毕后执行 systemctl daemon-reload重新加载服务配置,再执行systemctl restart docker 重启docker服务即可。

总结

这次的问题很有意思,记录下来供大家参考,水平有限,写的不好,欢迎斧正^。