多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 问题描述/背景 业务跑在容器环境,升级docker和runc后,发现浏览器访问业务异常。 业务属于前后端分离的,即前端会发起请求后端。前端在 172.20.x.x 主机上,业务后端在 172.17.x.x 。网络是通过三层网络转发。 ## 问题排查 1. 查看业务日志,是否正常 --> 未发现异常情况 2. 在容器和所在宿主机上curl业务的接口 --> 正常返回信息 3. 前端主机curl业务接口 --> curl异常 - 前端主机 `telnet 业务IP地址 业务端口号` ,不通 4. harbor主机tcpdump抓包分析, 发现harbor主机有收到请求,但是没有回复 ![](https://img.kancloud.cn/70/b1/70b14de8bf7ec1adbb899e32d4e80bab_1530x676.png) 5. 收到包但是没有回复,大概率是 **没有回包通路导致的** 。查看路由信息发现有条包含前端的路由且下一跳是桥接网卡。怀疑是docker生成的网络设备 ![](https://img.kancloud.cn/09/bd/09bdf9f142ad7458561ac52ad2c3db4c_1039x230.png) 6. 查看docker的桥接网卡情况 `sudo docker network ls` ,果真其中一个网桥id为 `56e678a34b55` 对应上面路由信息网卡名称为 `br-56e678a34b55` 一致。 7. 查看详细的网桥信息`sudo docker network inspect 56e678a34b55`,再次验证`route -n`查看IP段是否与网络是一致的。 --> 是一致的,原因就是harbor生成的 ## 解决方法 解决思路:将 `harbor` 的桥接网卡固定上某个IP段,就不会出现IP段冲突的问题。 ```yaml networks: harbor: external: false ipam: driver: default config: - subnet: "172.16.0.0/24" ``` >[info] 这里使用演示network下的一个网络。如果有多个网络的话,都限制下就好了。 >[warning] `subnet` 不要以现有的规划IP段冲突,否则后续还是有问题的。