docker空间清理


在Docker中清理无关的镜像是一个常见的维护任务,可以帮助你释放磁盘空间并优化Docker主机。以下是一些清理Docker镜像和容器的方法:

docker system prune -a -f --volumes 居然发现可以释放50多G的磁盘空间

docker system prune -a -f --volumes 是 Docker 中用于清理系统资源的命令,作用是 批量删除无用的 Docker 资源 ,释放磁盘空间。具体参数含义和清理范围如下:

各参数的作用

  • docker system prune :基础命令,用于清理未被使用的 Docker 资源(默认不删除未关联的 volumes)。
  • -a--all :扩展清理范围,不仅删除未被使用的镜像,还会删除所有 没有被任何容器引用的镜像 (默认只删 “悬空镜像”,即无标签的镜像)。
  • -f--force :强制清理,无需手动确认(默认会提示 “是否继续”,加此参数可跳过提示直接执行)。
  • --volumes :清理未被任何容器使用的 数据卷(volumes) (默认不清理 volumes,因为它们可能包含重要数据)。

最终清理的资源包括

  1. 停止的容器 (所有处于 stopped 状态的容器)。
  2. 未被任何容器引用的镜像 (包括有标签但无容器使用的镜像,-a 参数的作用)。
  3. 未被使用的网络 (没有容器连接的网络)。
  4. 未被任何容器挂载的本地数据卷--volumes 参数的作用)。

注意事项

  • 此命令具有 破坏性 ,清理后的数据无法恢复,尤其是 --volumes 可能删除重要数据,执行前务必确认:
    • 停止的容器是否还有用;
    • 未被引用的镜像是否还需保留;
    • 未挂载的 volumes 是否存储了需要备份的数据。
  • 建议在执行前先通过 docker ps -a(查看所有容器)、docker images -a(查看所有镜像)、docker volume ls(查看所有卷)检查资源。

适合在需要释放磁盘空间、且确认无用资源可删除时使用。

chenshang@192.168.10.32:/tmp$ docker system prune -a -f --volumes
Deleted Containers:
a300a6cdaea3a23ef321a2d36d597750a5e54bd082fd2e5f3a3d6a4c48cf1b7e

Deleted Networks:
whodb_default



Deleted Images:
untagged: langgenius/dify-plugin-daemon:0.0.2-local
untagged: langgenius/dify-plugin-daemon@sha256:116100125a0742f2f9f923b7e298fc982996d583593fd69acc4926477b266f0e
deleted: sha256:c2e6fc691491ad886f76edba42f823551fda71af841e46f6c2920f81e12cf037
......

Deleted build cache objects:
o768a932hzd9igozkh7iuwrl2
o4plg4fugioeup56mfob5grcz
gnoh7cql1th09l55jws81u6nh
v45bd2ygdq29neecggobveajv
......

Total reclaimed space: 49.1GB

其他方法

  1. 删除未使用的镜像
    未使用的镜像是指那些没有被任何容器使用的镜像。你可以使用以下命令来删除这些镜像:
docker image prune

或者使用更详细的命令:

docker image prune -a

这里,-a 或 --all 选项表示删除所有未被容器使用的镜像,包括中间层(即dangling images)。

  1. 删除悬空镜像(Dangling Images)

悬空镜像是指那些没有被任何标签指向的镜像层。这些通常是由于构建新镜像时产生的临时层。你可以使用以下命令来删除这些悬空镜像:

docker image prune -f
  1. 删除所有未使用的容器

未使用的容器是指那些已经停止运行且没有被任何数据卷引用的容器。你可以使用以下命令来删除这些容器:

docker container prune
  1. 删除所有停止的容器

如果你想删除所有已停止的容器,可以使用:

docker container ls -aq --filter "status=exited" | xargs docker container rm
  1. 清理所有资源(包括卷、网络等)

如果你想彻底清理Docker,包括网络、卷等,可以使用:

docker system prune

这个命令会提示你确认是否要删除所有未使用的资源,包括容器、网络、镜像、卷等。如果你确定要继续,可以添加 -a 或 --all 选项来强制执行:

docker system prune -a
  1. 清理系统并释放更多空间(包括构建缓存)

如果你还想清理构建缓存,可以使用:

docker system prune --volumes

这将删除未使用的卷以及构建缓存。注意,这会删除所有未被容器使用的数据卷,包括构建过程中生成的临时数据卷。

注意事项:
在执行删除操作前,确保你了解将要删除的内容,特别是对于生产环境中的Docker主机,最好先运行不带 -a 或 --all 选项的命令来预览哪些资源将被删除。
使用 xargs 时要小心,确保传递给 rm 的参数是你确实想要删除的。例如,使用 | xargs 之前可以先用 echo 替换 xargs 来查看将要执行的操作。
对于生产环境,建议在执行这些操作前做好备份,避免误删重要数据。


评论