Docker容器触发Exit code 137终止未清理,overlay2持续占磁盘空间原因是什么?
问题原因解析
1. Exit Code 137的本质含义
容器返回137退出码,本质是被系统的OOM Killer(内存不足时主动终止高内存占用进程的内核机制)强制杀死,不属于正常退出场景。这种异常终止状态下,Docker daemon不会自动卸载该容器对应的overlay2可写层挂载,即使容器已经显示为停止状态,该挂载点依然会被系统持续持有。
2. 停止容器磁盘占用持续上涨的核心逻辑
- 容器停止后,它的overlay2可写层仍然挂载在宿主机文件系统中,如果容器被终止前还有未刷入磁盘的缓冲数据、有宿主机进程持有该可写层的文件句柄未释放,后续缓冲数据落盘、持有句柄的进程向该目录写入数据时,都会直接写入到这个已停止容器的overlay2目录中,导致占用量持续上涨。
- 使用相同镜像启动新容器的操作,不会对旧容器的挂载状态、文件句柄持有状态产生任何影响,旧容器的可写层依然独立存在并可被写入。
3. 删除容器后问题解决的原因
执行docker rm <旧容器ID/名称>操作时,Docker会先强制卸载该容器对应的overlay2挂载点,释放所有关联的文件句柄,再删除对应的可写层文件,自然就停止了磁盘占用的持续增长。
运维提示:遇到容器异常退出(尤其是137、139这类被系统信号强制终止的退出码)时,建议及时清理不需要的停止容器,避免磁盘资源被无意义消耗。
内容的提问来源于stack exchange,提问作者user2894697
相关产品推荐
相关产品推荐

