无用镜像自动清理执行吗

wen IT资讯 30

本文目录导读:

无用镜像自动清理执行吗

  1. 如果你是在本机使用 Docker 命令行(默认不清理)
  2. 如果你是在 Docker Desktop 中(有自动清理选项)
  3. 如果你是在 Kubernetes 集群中(如 kubelet)
  4. 如果你使用的是容器化工具或平台(如 Docker Compose、Podman、K3s、Rancher等)
  5. 第三方自动清理工具(强烈推荐)

无用镜像自动清理”是否执行,这完全取决于你的具体环境和配置,默认情况下,Docker 或容器运行时不会主动、自动地清理无用的镜像,需要你手动配置或执行命令。

下面分几种常见场景说明:

如果你是在本机使用 Docker 命令行(默认不清理)

  • 不会自动清理,Docker 不会主动删除你不再使用的镜像,它们会一直占用磁盘空间。

  • 需要手动执行

    # 清理所有未被任何容器使用的 dangling 镜像(无标签的镜像)
    docker image prune
    # 清理所有未被使用的镜像(包括有标签但没容器用的)
    docker image prune -a
  • 可以配置自动清理:Docker 本身没有内置定时任务,但你可以通过 crontab(Linux/Mac)或 任务计划程序(Windows)定期运行上述命令。

如果你是在 Docker Desktop 中(有自动清理选项)

  • 默认不自动清理,但提供了手动清理自动清理的配置
  • 如何开启
    1. 打开 Docker Desktop -> 设置(齿轮图标)。
    2. 选择 Resources -> Advanced
    3. Disk image location 下方,有 Clean up 按钮。
    4. 更自动化的方式是:设置 -> Resources -> Virtual disk limitDocker Engine 中手动配置,但通常还是依赖手动 prune
    • 注意:Docker Desktop 没有一键“自动定期清理”的开关,但你可以通过命令行或第三方工具实现。

如果你是在 Kubernetes 集群中(如 kubelet)

  • 会执行自动清理!Kubernetes 的 kubelet 组件有内置的镜像垃圾回收(Image GC)机制。
  • 默认行为:kubelet 会定期检查磁盘使用率,当磁盘使用率超过一定阈值(默认 85%)时,它会自动按顺序删除最久未使用的镜像,直到磁盘使用率降到阈值以下(默认 80%)。
  • 可以配置:你可以在 kubelet 的启动参数或配置文件中修改 image-gc-high-thresholdimage-gc-low-threshold 来调整自动清理的触发条件。
  • 在 Kubernetes 工作节点上,无用镜像会自动清理

如果你使用的是容器化工具或平台(如 Docker Compose、Podman、K3s、Rancher等)

  • Docker Compose:默认不自动清理,可以用 docker compose down --rmi all 手动清理,或配合定时任务。
  • Podman:与 Docker 类似,需要手动执行 podman image prune
  • K3s / Rancher Desktop:通常继承了 Kubernetes 的镜像 GC 机制,会自动清理

第三方自动清理工具(强烈推荐)

如果你希望实现定时自动清理(无论是本机还是服务器),常用的方法是:

  • 使用 cron(Linux)/ 计划任务(Windows)

    # 每天凌晨2点执行清理
    0 2 * * * /usr/bin/docker image prune -a -f >> /var/log/docker-prune.log 2>&1
  • 使用 Watchtower:不仅能自动更新容器,还能配合清理旧镜像。

    docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup
  • 使用 Docker 的 systemd timer(Linux 系统)。

环境 默认是否自动清理 如何配置或执行
本机 Docker CLI 不会 手动运行 docker image prune -a
Docker Desktop 不会 (有图形化手动清理) 设置中手动清理,或用脚本定期执行
Kubernetes kubelet 会自动清理 (基于磁盘阈值) 修改 kubelet 参数调整阈值
Docker Compose 不会 手动 docker compose down --rmi all
Podman 不会 手动 podman image prune

核心答案

  • 大多数非 Kubernetes 环境(包括个人电脑、普通服务器)默认不会自动清理无用镜像。
  • 仅在 Kubernetes 集群的节点上,kubelet 会默认自动清理。

如果你希望实现自动清理,建议使用 cron 定时任务Watchtower 这类工具,而不是依赖系统默认行为。

抱歉,评论功能暂时关闭!