如何检查具有特定标签的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