容器运行时缓存主要包括可写层、日志文件和未挂载匿名卷,长期不清理会迅速占满/var/lib/docker/overlay2及/containers目录;需通过docker container prune、日志限流与truncate、volume prune及应用层清理分层处理。

容器运行时产生的临时缓存,主要指容器可写层(Container Layer)、日志文件、以及 overlay2 存储驱动下残留的临时数据。这些不是“内存缓存”,而是磁盘上的持久化临时内容,长期不清理会快速撑爆 /var/lib/docker/overlay2 和 /var/lib/docker/containers 目录。
重点清理三类运行时缓存
运行时缓存不等于构建缓存,它随容器启停动态生成,需针对性处理:
-
容器可写层:每个容器启动时在镜像只读层之上叠加的读写层,停止后仍保留——这是
/var/lib/docker/overlay2占用暴增的主因之一 -
容器日志文件:默认以 json-file 驱动写入
/var/lib/docker/containers/<id>/<id>-json.log</id></id>,单个可能达数十 GB -
未挂载的匿名卷和临时文件:如
docker run -v /tmp产生的临时卷,或应用自身写入容器内路径的缓存(如/tmp、/var/cache)
安全清理容器可写层与残留数据
可写层本身无法单独删除,但可通过清理已停止容器间接释放:
- 执行
docker container prune -f删除所有已停止容器——连带清除其可写层和网络端点 - 确认无重要 stopped 容器后再操作;若需保留某些停止容器,先用
docker start拉起再评估 - 对仍在运行但长期闲置的容器,建议先
docker stop && docker rm再重建,避免可写层持续膨胀
控制并清理容器日志
日志是运行时缓存中最易失控的部分,推荐双管齐下:
- 运行新容器时加日志限制:
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 ... - 清理现有旧日志:
find /var/lib/docker/containers -name "*.log" -size +100M -delete(慎用,建议先ls -lh确认) - 或统一清空(不影响运行中容器):
truncate -s 0 /var/lib/docker/containers/*/*-json.log
清理临时卷与内部缓存
部分容器会在内部生成缓存(如 Node.js 的 node_modules、Python 的 __pycache__),这类需从应用层配合:
- 使用
docker volume prune -f清理未被任何容器引用的卷(含匿名卷) - 对必须保留的数据卷,进入容器手动清理:
docker exec -it <container> sh -c "rm -rf /tmp/* /var/cache/*"</container> - 长期方案:在 Dockerfile 中用
tmpfs挂载临时目录,或改用local卷并设置生命周期策略
不复杂但容易忽略:运行时缓存清理关键在“及时”和“分层”。先控日志、再清停止容器、最后处理卷,比等磁盘告警后再大扫除更稳妥。











