修剪未使用的 Docker 对象
Docker 对未使用的对象(通常称为“垃圾回收”)的清理采取保守策略,例如镜像、容器、卷和网络。这些对象通常不会被删除,除非您明确指示 Docker 进行删除。这可能会导致 Docker 占用额外的磁盘空间。对于每种类型的对象,Docker 都提供了 prune
命令。此外,您还可以使用 docker system prune
命令一次性清理多种类型的对象。本主题将介绍如何使用这些 prune
命令。
修剪镜像
docker image prune
命令允许您清理未使用的镜像。默认情况下,docker image prune
仅清理悬空镜像。悬空镜像是指未标记且未被任何容器引用的镜像。要删除悬空镜像,请使用
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
要删除未被现有容器使用的所有镜像,请使用 -a
标志
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您确认是否继续。要绕过提示,请使用 -f
或 --force
标志。
您可以使用 --filter
标志并通过过滤表达式来限制要修剪的镜像。例如,要仅考虑 24 小时前创建的镜像,请使用
$ docker image prune -a --filter "until=24h"
还提供了其他过滤表达式。有关更多示例,请参阅docker image prune
参考文档。
修剪容器
当您停止容器时,除非您使用 --rm
标志启动它,否则它不会被自动移除。要查看 Docker 主机上的所有容器(包括已停止的容器),请使用 docker ps -a
命令。您可能会惊讶地发现存在这么多容器,尤其是在开发系统中!已停止容器的可写层仍然占用磁盘空间。要清理这些空间,您可以使用 docker container prune
命令。
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您确认是否继续。要绕过提示,请使用 -f
或 --force
标志。
默认情况下,会移除所有已停止的容器。您可以使用 --filter
标志来限制范围。例如,以下命令仅移除停止时间超过 24 小时的容器
$ docker container prune --filter "until=24h"
还提供了其他过滤表达式。有关更多示例,请参阅docker container prune
参考文档。
修剪卷
卷可被一个或多个容器使用,并占用 Docker 主机上的空间。卷永远不会被自动移除,因为这样做可能会破坏数据。
$ docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您确认是否继续。要绕过提示,请使用 -f
或 --force
标志。
默认情况下,会移除所有未使用的卷。您可以使用 --filter
标志来限制范围。例如,以下命令仅移除未标记有 keep
标签的卷
$ docker volume prune --filter "label!=keep"
还提供了其他过滤表达式。有关更多示例,请参阅docker volume prune
参考文档。
修剪网络
Docker 网络不会占用太多磁盘空间,但它们会创建 iptables
规则、桥接网络设备和路由表条目。要清理这些内容,您可以使用 docker network prune
命令清理未被任何容器使用的网络。
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您确认是否继续。要绕过提示,请使用 -f
或 --force
标志。
默认情况下,会移除所有未使用的网络。您可以使用 --filter
标志来限制范围。例如,以下命令仅移除创建时间超过 24 小时的网络
$ docker network prune --filter "until=24h"
还提供了其他过滤表达式。有关更多示例,请参阅docker network prune
参考文档。
修剪所有对象
docker system prune
命令是一个快捷方式,用于修剪镜像、容器和网络。卷默认情况下不会被修剪,您必须为 docker system prune
命令指定 --volumes
标志来修剪卷。
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- unused build cache
Are you sure you want to continue? [y/N] y
要同时修剪卷,请添加 --volumes
标志
$ docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您确认是否继续。要绕过提示,请使用 -f
或 --force
标志。
默认情况下,会移除所有未使用的容器、网络和镜像。您可以使用 --filter
标志来限制范围。例如,以下命令移除时间超过 24 小时的项目
$ docker system prune --filter "until=24h"
还提供了其他过滤表达式。有关更多示例,请参阅docker system prune
参考文档。