如何使用Docker图像过滤器


82

我会写

docker images --filter "dangling=true"

我还可以使用其他哪些过滤器?

我可以使用这样的东西吗?

docker images --filter "running=false"

Answers:


86

Docker v1.13.0支持以下条件:

  -f, --filter value    Filter output based on conditions provided (default [])
                        - dangling=(true|false)
                        - label=<key> or label=<key>=<value>
                        - before=(<image-name>[:tag]|<image-id>|<image@digest>)
                        - since=(<image-name>[:tag]|<image-id>|<image@digest>)
                        - reference=(pattern of an image reference)

或用于grep按某些值过滤图像:

$ docker images | grep somevalue

参考文献


5
请更新您的答案-目前,截至2017年2月,它支持更多参数。
Greg Dubicki '17

5
这不是完美的方法,但是使用上述方法,您可以做类似的事情docker images -f "reference=*/*/*latest"-这会给您带来类似于k8s:30000/github/someImage:latest。或docker images -f "reference=*/*latest"会得到你k8s:30000/someImage:latest。如果您想清理它们docker rmi $(docker images -f "reference=*/*/*latest" -q --no-trunc)
Mark_Eng

如何通过回购名称排除某些图像?
可变

40

您也可以使用REPOSITORY参数docker images过滤图像。

例如,假设我们有图像:

$ docker images
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
local-foo            latest       17864104b328     2 months ago    100 MB
example.com/bar      latest       b94c37de2801     9 months ago    285 MB
example.com/baz      latest       a004e3ac682c     2 years ago     221 MB

我们可以显式过滤具有给定名称的所有图像:

$ docker images example.com/bar
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB

Docker还支持遍历:

$ docker images "example.com/*"
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB
example.com/baz      latest       a004e3ac682c     2 years ago     221 MB

官方文档在这里


3
请注意,*通配符不适用于/存储库名称。因此,在最后一个示例中,列出所有带有标签latest的图像的命令docker images --filter=reference='*:latest'是错误的。正确的命令是docker images --filter=reference='*/*:latest'
托马什Záluský

一直以来,我一直在寻找--filter name=something-一直以来,简单的解决方案是您根本不需要(n显式)过滤器!
Tripleee

2
对于那些仍然感到困惑的人...如果您正在寻找图像openapitools/openapi-generator-cli,那么docker images open*将找不到它。但是docker images open*/*会找到它的。
瑞安·伦迪

12

在Docker v1.7中:

当前支持的过滤器是:

  • 悬空(布尔值-truefalse
  • 标签(label=<key>label=<key>=<value>

1
从Docker before=<image-name>[:tag]|<image-id>|<image@digest>since=(<image-name>[:tag]|<image-id>|<image@digest>)
v1.12开始

6

为了我,

docker images -q | while read IMAGE_ID; do
    docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done

做到了。date命令可以通过以下方式产生相同格式的输出

date -Ins --date='10 weeks ago'

这使我可以比较时间戳。为了方便起见,我仍然使用滤镜来悬挂图像。



0

还有另一个示例,可与版本17.09 ++一起使用:

sudo docker rmi $(sudo docker images -f=reference="registry.gitlab.com/example-app" -f "dangling=true" -q)

说明:

  • reference -我们通过存储库名称引用图像;
  • dangling=true -我们正在删除未标记的图像;
  • -q -表示安静,仅显示图像的数字ID,而不显示整行。

此命令将删除所有存储库名称为“ registry.gitlab.com/example-app”且未标记的图像(<none>位于标签列中)

参考链接:https : //docs.docker.com/engine/reference/commandline/images/#filtering

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.