过滤命令

你可以使用--filter标志来限定你的命令范围。在过滤时,命令只包括与你指定的模式匹配的条目。

使用过滤器

--filter 标志期望一个由操作符分隔的键值对。

$ docker COMMAND --filter "KEY=VALUE"

键代表你想要过滤的字段。 值是指定字段必须匹配的模式。 操作符可以是等于(=)或不等于(!=)。

例如,命令 docker images --filter reference=alpine 过滤了 docker images 命令的输出,仅打印 alpine 镜像。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
ubuntu       20.04     33a5cc25d22c   36 minutes ago   101MB
ubuntu       18.04     152dc042452c   36 minutes ago   88.1MB
alpine       3.16      a8cbb8c69ee7   40 minutes ago   8.67MB
alpine       latest    7144f7bab3d4   40 minutes ago   11.7MB
busybox      uclibc    3e516f71d880   48 minutes ago   2.4MB
busybox      glibc     7338d0c72c65   48 minutes ago   6.09MB
$ docker images --filter reference=alpine
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
alpine       3.16      a8cbb8c69ee7   40 minutes ago   8.67MB
alpine       latest    7144f7bab3d4   40 minutes ago   11.7MB

可用的字段(在本例中为reference)取决于您运行的命令。 一些过滤器期望完全匹配。其他过滤器处理部分匹配。一些过滤器 允许您使用正则表达式。

请参考 CLI参考描述 了解每个命令支持的过滤功能。

组合过滤器

您可以通过传递多个--filter标志来组合多个过滤器。以下示例展示了如何打印所有匹配alpine:latestbusybox的图像 - 一个逻辑OR

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       20.04     33a5cc25d22c   2 hours ago   101MB
ubuntu       18.04     152dc042452c   2 hours ago   88.1MB
alpine       3.16      a8cbb8c69ee7   2 hours ago   8.67MB
alpine       latest    7144f7bab3d4   2 hours ago   11.7MB
busybox      uclibc    3e516f71d880   2 hours ago   2.4MB
busybox      glibc     7338d0c72c65   2 hours ago   6.09MB
$ docker images --filter reference=alpine:latest --filter=reference=busybox
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
alpine       latest    7144f7bab3d4   2 hours ago   11.7MB
busybox      uclibc    3e516f71d880   2 hours ago   2.4MB
busybox      glibc     7338d0c72c65   2 hours ago   6.09MB

多个否定过滤器

一些命令支持对 标签 进行否定过滤。否定过滤仅考虑不符合指定模式的结果。以下命令会删除所有未标记为 foo 的容器。

$ docker container prune --filter "label!=foo"

在组合多个否定标签过滤器时有一个注意事项。多个否定过滤器会创建一个单一的否定约束——逻辑AND。以下命令会修剪所有容器,除了那些同时标记为foobar的容器。仅标记为foobar,但不同时标记的容器将被修剪。

$ docker container prune --filter "label!=foo" --filter "label!=bar"

参考

有关过滤命令的更多信息,请参阅支持--filter标志的命令的CLI参考描述: