上一篇 下一篇 分享链接 返回 返回顶部

容器镜像本地缓存冗余文件清理技巧

发布人: 发布时间:9小时前 阅读量:6

问题背景

容器运行时(如Docker、Podman)会缓存拉取的镜像层、中间构建结果以及已停止容器的文件系统,长期积累可能导致磁盘空间被大量冗余文件占用。特别是开发或CI/CD环境中,频繁构建和拉取镜像容易产生数十GB的废弃数据。

清理前的检查

执行清理操作前,建议先评估当前磁盘占用状况:

  • 查看总占用docker system dfpodman system df
  • 分析镜像、容器、卷和构建缓存docker system df -v
  • 确认正在运行的容器docker ps,避免误删关联数据

常用清理命令

安全的最低清理

只清理悬垂镜像(无标签且无依赖的镜像层):

docker image prune
podman image prune

清理所有未使用的资源

包括停止的容器、未使用的网络、悬垂镜像和构建缓存:

docker system prune -a
podman system prune -a

-f 可跳过确认提示。

定向清理构建缓存

Docker BuildKit 缓存:docker builder prune
Podman 构建缓存:podman system prune --build

手动清理残留文件

当极端冗余或命令无法释放全部空间时,可手动操作:

  1. 停止所有容器docker stop $(docker ps -aq)
  2. 删除所有容器docker rm $(docker ps -aq)(确认无重要数据)
  3. 清理存储目录(以root执行):
    • Docker:rm -rf /var/lib/docker/overlay2/* 注意会保留 image 子目录,建议用 docker system prune 替代
    • Podman:rm -rf /var/lib/containers/storage/overlay/*
  4. 重建默认存储:重启Docker daemon后执行 docker system prune -afdocker image ls 确认

自动化与定期清理

推荐通过 cron 或 systemd timer 定期执行:

# 每天凌晨3点清理悬垂镜像和构建缓存(保留最近24小时的运行容器)
0 3 * * * /usr/bin/docker system prune -f --filter "until=24h"

可调整过滤条件,如 --filter "label!=keep" 保留特定标签资源。

注意事项

  • 不要直接删除 /var/lib/docker 目录,可能导致容器和镜像元数据丢失。
  • 使用前备份重要卷数据docker volume prune 会删除匿名卷。
  • 区分容器运行时与镜像缓存docker container prune 仅移除停止容器,不影响镜像。
  • 检查符号链接:若将存储目录挂载为软链接,清理前需确认链接目标。
目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com