Docker清理悬空镜像

Docker清理悬空镜像

引言

反复build镜像后,旧的无标签镜像()一层层堆积,/var/lib/docker占满磁盘。这些悬空镜像没被任何容器引用,可以安全清理,但要分清悬空、停止容器、无用网络和构建缓存,别一刀切删错。

先看占用

docker system df

查看镜像、容器、卷、构建缓存各占多少,先摸清再动手。

什么是悬空镜像

build出新标签后,旧层变成:,没有标签、不被容器使用,就是dangling悬空镜像。

只清悬空镜像(安全)

docker image prune

只删除无标签无引用的dangling镜像,已打标签和在用镜像不动,最稳妥。

清停止的容器

docker container prune

删掉所有已退出的容器,正在运行的不受影响。

清无用镜像和构建缓存(更彻底)

docker system prune

一次清悬空镜像、停止容器、无用网络和构建缓存,加-a连未被容器使用的镜像也删,加--volumes连未使用卷一起删:

docker system prune -a --volumes

手动删单个镜像

docker image rm 镜像ID

若提示被容器引用,先确认容器用途,别直接强制删。

注意事项

  • 生产慎用-a和--volumes,卷里可能存数据库数据,删了不可恢复;
  • 先docker system df看占用,再决定清哪一类;
  • 清理前确认没有需要保留的停止容器和备份卷;
  • 镜像仓库里还能重新拉取的镜像才适合-a全清;
  • 定期配合定时任务清理,避免磁盘缓慢耗尽。

总结

日常用docker image prune清悬空镜像最安全,docker system prune清停止容器和缓存,-a和--volumes只在确认无保留价值时用。先df看占用、分级清理,避免误删业务卷和在用镜像。


emer 发布于  2026-10-19 07:21 

Docker删除所有停止的容器,一键清理

前言

用Docker久了,一堆停止的容器占磁盘,一个个删太麻烦。本文讲怎么一键清理。

一、查看所有停止的容器

先看看有多少个停止的容器:

docker ps -a

看STATUS列,显示Exited的就是停止的。

只看停止的:

docker ps -a -f status=exited

二、删除所有停止的容器

一键清理

docker container prune

输出:

Total reclaimed space: 1.2GB

直接删掉所有停止的容器。

确认提示

默认会问你:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]

输入y确认。

跳过确认

docker container prune -f

加个 -f 直接删,不问。

三、其他清理命令

删除所有没用的镜像

docker image prune

只删悬空镜像(dangling images),就是没有标签的。

删所有没用的镜像(包括没在用的)

docker image prune -a

清理所有没用的东西

docker system prune

包括:

  • 停止的容器
  • 没用的网络
  • 悬空镜像
  • 构建缓存

清理所有没用的东西(包括镜像)

docker system prune -a

连没在用的镜像也删了。

清理数据卷

docker volume prune

注意: 这个会删没用的数据卷,里面的数据也没了!

四、手动删除单个容器

如果只想删某一个:

docker rm 容器ID或名字

强制删除运行中的容器:

docker rm -f 容器ID或名字

五、批量删除停止的容器

方法1:用docker rm

docker rm $(docker ps -a -q -f status=exited)

解释:

  • docker ps -a -q 列出所有容器ID
  • -f status=exited 只筛停止的
  • docker rm 删掉

方法2:用docker container prune

docker container prune -f

推荐用这个,简单。

六、查看磁盘占用

清理之前看看占了多少:

docker system df

输出:

TYPE            TOTAL   ACTIVE  SIZE    RECLAIMABLE
Images          20      5       10GB    7GB (70%)
Containers      15      5       500MB   400MB (80%)
Local Volumes   8       3       2GB     1GB (50%)
Build Cache     -       -       1GB     800MB

看RECLAIMABLE列,就是可以回收的。

七、常见场景

场景1:测试完一堆容器,想全清了

docker container prune -f

场景2:磁盘满了,全面清理

docker system prune -a -f --volumes
  • -a 删所有没用的镜像
  • -f 不问
  • --volumes 连数据卷也删

注意: 这个很猛,数据卷也删了,重要数据先备份!

场景3:只清理镜像,不动容器

docker image prune -a -f

八、常见坑

坑1:删了数据卷,数据没了

docker system prune --volumes

加了 --volumes 会删没用的数据卷。

注意: 数据库的数据卷别删!

坑2:删了镜像,重新拉要很久

docker image prune -a

把所有没在用的镜像都删了,下次用还要重新拉。

建议: 常用镜像留着,别全删。

坑3:误删了运行中的容器?

docker container prune 只删停止的,运行中的删不了。

放心,安全。

坑4:删了容器,数据卷还在

docker rm 容器名

只删容器,数据卷还在。

想连数据卷一起删:

docker rm -v 容器名

九、定期清理脚本

写个脚本,定期清理:

#!/bin/bash
# 清理停止的容器
docker container prune -f
# 清理悬空镜像
docker image prune -f
# 清理没用的网络
docker network prune -f

加到crontab,每周跑一次:

0 3 * * 0 /home/clean-docker.sh

总结

记住:

  1. docker container prune 删所有停止的容器
  2. docker image prune -a 删所有没用的镜像
  3. docker system prune 全面清理
  4. 删数据卷要小心,别把数据库删了

最常用:

docker container prune -f

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:21 
'); })();