修剪未使用的 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
命令是修剪镜像、容器和网络的快捷方式。默认情况下不会修剪卷,您必须指定
用于修剪卷--volumes
的标志。docker system prune
$ 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
参考资料
以获取更多示例。