如何使用docker图像过滤器

时间:2014-07-09 16:38:54

标签: docker

我可以写

docker images --filter "dangling=true"

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

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

docker images --filter "running=false"

9 个答案:

答案 0 :(得分:59)

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

参考

答案 1 :(得分:21)

您还可以使用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还支持globbing:

$ 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

Official docs here

答案 2 :(得分:11)

在Docker v1.7中:

目前支持的过滤器是:

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

答案 3 :(得分:5)

对我来说,

x = 0xF8A0C001

做了这个伎俩。 date命令可以通过

以相同的格式生成输出
docker images -q | while read IMAGE_ID; do
    docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done

允许我比较时间戳。不过,为了方便,我仍然使用滤镜来悬挂图像。

答案 4 :(得分:3)

  

sudo docker images --filter“running = false”

要清理旧的已停止的容器,您可以使用:
docker container prune

要删除未标记的图像,您可以使用:
docker image prune

答案 5 :(得分: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

答案 6 :(得分:0)

要添加有关如何使用图像过滤器的原始答案,只需为类似场景添加用例。

我的 CI 管道每次都会重新构建 docker 并用最后提交编号标记它们,然后将它们发送到 docker 存储库。

然而,这会导致 CI​​ 构建机器上的残留和未使用/不需要的图像。 作为后期步骤,我需要将它们全部清理干净,即使是刚刚构建的那些,但同时,希望不删除我的基本下载图像(例如 OpenJDK、PostGre)以避免每次下载

  1. 在 Docker 文件中添加一个/任何标签(唯一的,预计不会包含在我的基础镜像中)

LABEL built=XYZ

  1. 使用图像过滤器并获取我创建的图像的图像标识符

docker images --quiet --filter label=built=XYZ

  1. 在构建后操作中删除它们

docker rmi -f $(docker images --quiet --filter label=built=XYZ)

答案 7 :(得分:0)

在 Powershell 中使用此示例:

docker images --format "{{.Repository}}:{{.Tag}}" | findstr "some_name"

要删除图像,您可以将其与删除命令结合使用,如下所示:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "some_name")

答案 8 :(得分:-1)

仅供参考,不带过滤器,但当您用作测试或学习时删除所有图像,

docker image rm -f $(docker image ls)

问候。