修剪未使用的Docker对象

预计阅读时间:5分钟

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
        - all 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标志。

修剪修剪图像容器网络磁盘管理垃圾收集