如何检查具有特定标签的Docker镜像是否存在于本地?

我想知道是否在本地存在具有特定标签的Docker镜像。 如果Docker客户端本身无法执行此操作,则可以使用bash脚本。

只是为潜在的bash脚本提供一些提示,运行docker images命令的结果返回如下内容:

 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE rabbitmq latest e8e654c05c91 5 weeks ago 143.5 MB busybox latest 8c2e06607696 6 weeks ago 2.433 MB rabbitmq 3.4.4 a4fbaad9f996 11 weeks ago 131.5 MB 

我通常testingdocker images -q的结果(如在这个脚本中 ):

 if [[ "$(docker images -q myimage:mytag 2> /dev/null)" == "" ]]; then # do something fi 

由于docker images只将REPOSITORY作为参数,所以您需要在标签上使用grep,而不使用-q

docker images现在需要标签(docker1.8+) [REPOSITORY[:TAG]]

下面提到的另一种方法是使用docker检查 。
但是对于docker 17+,图像的语法是: docker image inspect (在一个不存在的图像上, 退出状态将是非0 )

尝试docker inspect ,例如:

 $ docker inspect --type=image treeder/hello.rb:nada Error: No such image: treeder/hello.rb:nada [] 

但现在有了一个存在的图像,你会得到一堆信息,例如:

 $ docker inspect --type=image treeder/hello.rb:latest [ { "Id": "85c5116a2835521de2c52f10ab5dda0ff002a4a12aa476c141aace9bc67f43ad", "Parent": "ecf63f5eb5e89e5974875da3998d72abc0d3d0e4ae2354887fffba037b356ad5", "Comment": "", "Created": "2015-09-23T22:06:38.86684783Z", ... } ] 

这是一个很好的JSON格式。

你可以像下面一样使用:

 [ ! -z $(docker images -q someimage:sometag) ] || echo "does not exist" 

要么:

 [ -z $(docker images -q someimage:sometag) ] || echo "already exists" 

tldr:

 docker image inspect myimage:mytag 

通过示范的方式…

成功,find形象:

 $ docker image pull busybox:latest latest: Pulling from library/busybox Digest: sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f Status: Image is up to date for busybox:latest $ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no yes 

失败,缺less图像:

 $ docker image rm busybox:latest Untagged: busybox:latest Untagged: busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f $ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no no 

参考:

https://docs.docker.com/engine/reference/commandline/image_inspect/

在上面的Vonc答案的帮助下,我创build了以下名为check.sh bash脚本:

 #!/bin/bash image_and_tag="$1" image_and_tag_array=(${image_and_tag//:/ }) if [[ "$(docker images ${image_and_tag_array[0]} | grep ${image_and_tag_array[1]} 2> /dev/null)" != "" ]]; then echo "exists" else echo "doesn't exist" fi 

将其用于现有的图像和标签将exists ,例如:

 ./check.sh rabbitmq:3.4.4 

使用它为一个不存在的图像和标签将打印doesn't exist ,例如:

 ./check.sh rabbitmq:3.4.3