一文教你如何清理Docker中闲置的镜像,容器和卷

 更新时间:2025年06月20日 09:08:19   作者:卓普云  
在使用 Docker 的过程中,很容易积累大量未使用的镜像、容器和数据卷,这些未使用的资源不仅占据输出空间,还会消耗磁盘空间,下面我们就来看看如何清理吧

Docker 让你可以轻松地将应用程序和服务封装进容器中,使它们可以在任何地方运行。然而,在使用 Docker 的过程中,很容易积累大量未使用的镜像、容器和数据卷,这些未使用的资源不仅占据输出空间,还会消耗磁盘空间。

Docker 提供了所有你需要的工具,通过命令行来清理你的系统。这份备忘单式指南为你提供了一些实用的命令快速参考,帮助你通过删除未使用的 Docker 镜像、容器和卷来释放磁盘空间,保持系统整洁。

本教程采用备忘录格式,包含了所有可执行的操作,以及对应的命令行片段。

注意:命令中使用的命令替换语法,$(command),在许多流行的 Shell 中都可用,如 bash、zsh 和 Windows Powershell。

另外,如果你想要一种给服务器一键部署 Docker 应用的方式,可以试试看 DigitalOcean App Platform。

清除所有未使用或悬空镜像、容器、卷和网络

Docker 提供了一个单一命令,可以清理任何悬空(dangling)的资源 —— 镜像、容器、卷和网络 —— 这些资源没有被标记或与任何容器关联:

docker system prune

要同时删除所有已停止的容器和所有未使用的镜像(不仅仅是悬空镜像),请在命令中添加 -a 标志:

docker system prune -a

删除 Docker 镜像

删除一个或多个特定镜像

使用带有 -a 标志的 docker images 命令来找到你想要删除的镜像的 ID。这将显示所有镜像,包括中间镜像层。当你找到想要删除的镜像时,可以将它们的 ID 或标签传递给 docker rmi 命令:

查找镜像:

docker images -a

删除镜像:

docker rmi Image Image

注意:docker images 命令中的 -a 或 --all 标志会显示所有 Docker 镜像,包括那些没有被任何标签引用的中间镜像。默认情况下,docker images 仅显示至少有一个标签的镜像。然而,可能有一些没有任何标签的镜像仍然占用系统磁盘空间。-a 标志有助于识别可以清理以节省磁盘空间的镜像。当与 docker rmi 命令一起使用时,也可以使用 -f 或 --force 标志来删除没有标签的镜像。

删除悬空的 Docker 镜像

Docker 镜像由多个层组成。悬空镜像是那些与任何标记过的镜像无关的层。它们不再有用并消耗磁盘空间。可以通过在 docker images 命令中添加过滤标志 -f 并设置值为 dangling=true 来定位这些镜像。当你确定要删除它们时,可以使用 docker image prune 命令:

注意:如果你构建了一个没有标记的镜像,该镜像将出现在悬空镜像列表中,因为它与任何标记过的镜像无关。你可以通过在构建时提供一个标签来避免这种情况,并且可以使用 docker tag 命令对镜像进行追溯标记。

查找镜像:

docker images -f dangling=true

删除镜像:

docker image prune

根据模式删除镜像

你可以使用 docker images 和 grep 的组合找到所有与某个模式匹配的镜像。一旦确定,可以使用 awk 将 ID 传递给 docker rmi 进行删除。注意,这些工具不是 Docker 提供的,也不一定在所有系统上可用:

查找镜像:

docker images -a | grep "pattern"

删除镜像:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

删除所有镜像

系统上的所有 Docker 镜像可以通过在 docker images 命令中添加 -a 来列出。一旦你确定要删除它们,可以添加 -q 标志来传递镜像 ID 给 docker rmi:
查找镜像:

docker images -a

删除镜像:

docker rmi $(docker images -a -q)

删除容器

删除一个或多个特定容器

使用带有 -a 标志的 docker ps 命令来定位你想要删除的容器的名称或 ID:

查找容器:

docker ps -a

删除容器:

docker rm ID_or_Name ID_or_Name

退出时删除容器

如果你在创建容器时就知道一旦完成就不想保留它,可以运行 docker run --rm 来在容器退出时自动删除它:

运行并删除:

docker run --rm image_name

删除所有已退出的容器

你可以使用 docker ps -a 并根据它们的状态筛选容器:created、restarting、running、paused 或 exited。要查看已退出容器的列表,请使用 -f 标志基于状态进行筛选。确认想要删除这些容器后,使用 -q 将 ID 传递给 docker rm 命令:

查找容器:

docker ps -a -f status=exited

删除容器:

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

使用多个过滤器删除容器

Docker 过滤器可以通过重复过滤标志并添加额外的值来组合。这将生成符合任一条件的容器列表。例如,如果你想删除标记为 created(使用无效命令运行容器时可能出现的状态)或 exited 的所有容器,你可以使用两个过滤器:

查找容器:

docker ps -a -f status=exited -f status=created

删除容器:

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

根据模式删除容器

你可以使用 docker ps 和 grep 的组合找到所有与某个模式匹配的容器。当你确定拥有想要删除的列表时,可以使用 awk 和 xargs 将 ID 提供给 docker rm。注意,这些工具不是 Docker 提供的,也不一定在所有系统上可用:

查找容器:

docker ps -a | grep "pattern"

删除容器:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

停止并删除所有容器

你可以使用 docker ps 查看系统上的容器。添加 -a 标志将显示所有容器。当你确定想要删除它们时,可以添加 -q 标志来提供 ID 给 docker stop 和 docker rm 命令:

查找容器:

docker ps -a

删除容器:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

删除卷

删除一个或多个特定卷

使用 docker volume ls 命令定位你希望删除的卷的名称。然后,你可以使用 docker volume rm 命令删除一个或多个卷:

查找容器:

docker volume ls

删除容器:

docker volume rm volume_name volume_name

删除悬空卷

由于卷的存在是独立于容器的,当容器被移除时,卷并不会自动被同时移除。当一个卷存在且不再连接到任何容器时,它被称为悬空卷。要定位这些卷以确认你想要删除它们,你可以使用带有过滤器的 docker volume ls 命令,仅显示悬空卷的结果。当你对列表满意时,可以使用 docker volume prune 删除它们所有:

查找卷:

docker volume ls -f dangling=true

删除:

docker volume prune

删除容器及其卷

如果你创建了一个未命名的卷,可以在删除容器时同时用 -v 标志删除它。注意,这仅适用于未命名的卷。当容器成功删除后,会显示其 ID。注意,没有提及卷的移除。如果它是未命名的,它会在系统中默默被移除。如果它是命名的,它会默默地保留。

删除容器及卷:

docker rm -v container_name

结论

本教程涵盖了一些使用 Docker 删除镜像、容器和卷的常用命令。每个命令都可以使用许多其他的组合和标志。

到此这篇关于一文教你如何清理Docker中闲置的镜像,容器和卷的文章就介绍到这了,更多相关Docker清理镜像 容器和卷内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker-compose java.net.UnknownHostException问题

    docker-compose java.net.UnknownHostException问题

    这篇文章主要介绍了docker-compose java.net.UnknownHostException问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • docker部署微信小程序自动构建发布和更新的详细步骤

    docker部署微信小程序自动构建发布和更新的详细步骤

    通过 Jenkins 和 Docker 部署微信小程序,并实现自动构建、发布和版本更新,主要涉及到几个步骤,下面给大家分享docker部署微信小程序自动构建发布和更新的详细步骤,感兴趣的朋友一起看看吧
    2024-12-12
  • centos7 安装docker步骤详细介绍

    centos7 安装docker步骤详细介绍

    这篇文章主要介绍了centos7 安装docker步骤详细介绍的相关资料,需要的朋友可以参考下
    2017-01-01
  • 使用Shell脚本批量启停Docker服务

    使用Shell脚本批量启停Docker服务

    最近日常测试中经常需要手动启动或停止docker,于是决定写一个Shell脚本来代替人工操作,下面小编把我实现过程分享到脚本之家平台,需要的朋友参考下
    2019-11-11
  • Docker创建MySQL容器的方法

    Docker创建MySQL容器的方法

    本篇文章主要介绍了Docker创建MySQL容器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Docker中redis安装及测试教程

    Docker中redis安装及测试教程

    这篇文章主要介绍了Docker中redis安装及测试教程的一些基础方法和知识,为后续安装部署redis集群做准备,需要的朋友可以参考下
    2022-11-11
  • 运行中的docker容器端口映射如何修改详解

    运行中的docker容器端口映射如何修改详解

    这篇文章主要给大家介绍了关于运行中的docker容器端口映射如何修改的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Docker 配置固定IP及桥接的实现方法

    Docker 配置固定IP及桥接的实现方法

    这篇文章主要介绍了Docker 配置固定IP和桥接的实现方法的相关资料,这里详细介绍了Docker 的四种网络模式及如何实现桥接的案例,需要的朋友可以参考下
    2016-10-10
  • idea链接不上虚拟机的docker里的mongodb问题及解决

    idea链接不上虚拟机的docker里的mongodb问题及解决

    这篇文章主要介绍了idea链接不上虚拟机的docker里的mongodb问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • docker安装redmine步骤

    docker安装redmine步骤

    在本篇文章里小编给大家整理的是关于docker安装redmine步骤和相关代码,需要的朋友们学习下。
    2020-01-01

最新评论