apt升级后运行docker-compose致GCP VM的SSH连接断开问题排查
故障现象
在GCP虚拟机上部署运行多个Docker容器时,执行docker-compose命令会直接导致SSH连接断开。该故障在当日早间从未出现,故障发生前系统仅执行过sudo apt update && sudo apt upgrade更新操作。
可稳定复现问题的docker-compose配置
version: '3' services: mongo: container_name: mongo image: mongo expose: - "27017" ports: - "27017:27017"
当前运行环境信息
- 操作系统:Ubuntu,内核版本为
5.13.0-1030-gcp #36~20.04.1-Ubuntu SMP Fri Jun 3 15:33:42 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux - docker-compose版本:1.25.0
- Docker版本:20.10.17, build 100c701
- Docker与docker-compose构建均启用BuildKit特性
排查与解决建议
- 优先排查内核升级触发的netfilter模块异常
apt升级过程中会同步更新GCP定制内核,Docker端口映射能力依赖netfilter/iptables相关内核模块,5.13.0-1030-gcp版本内核存在已知的netfilter处理NAT规则时触发内核panic的问题,一旦触发会直接导致虚拟机网络栈崩溃,SSH连接断开。排查时不要依赖SSH连接,直接通过GCP控制台的串口登录功能进入系统:- 执行
dmesg -T查看断连时间点的内核日志,确认是否存在nf_conntrack、iptable_nat相关的调用堆栈报错 - 如果确认是该问题,临时方案是重启实例在GRUB启动菜单选择升级前的旧内核启动,也可以执行
sysctl -w net.netfilter.nf_conntrack_tcp_loose=0临时规避,等待官方推送内核补丁后再完成更新
- 执行
- 验证BuildKit兼容问题
当前环境默认开启BuildKit特性,1.25.0版本的docker-compose属于较早版本,和新版Docker的BuildKit链路存在已知兼容问题,可能触发Docker守护进程异常连带断网。复现操作前先执行export DOCKER_BUILDKIT=0 COMPOSE_DOCKER_CLI_BUILD=0关闭BuildKit,再运行docker-compose命令观察是否还会出现断连问题。 - 排查Docker服务与网络规则异常
- 在串口控制台执行
journalctl -u docker.service -f实时打印Docker服务日志,触发复现操作时观察日志中是否存在服务崩溃退出、iptables规则写入失败、网桥创建异常的报错 - 如果确认是Docker包升级导致的问题,可以将Docker版本回退到升级前的已验证版本再测试
- 在串口控制台执行
- 排查GCP访客代理异常
apt升级会同步更新google-guest-agent组件,部分版本的访客代理在检测到Docker创建的网桥、iptables规则时,会错误触发网卡重置、路由表清理操作,直接导致网络中断。可以执行journalctl -u google-guest-agent查看断连时间点的日志,确认是否存在网卡重置、路由删除的相关记录,如果有可以临时将访客代理版本回退。
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

