如何检查本地是否存在带有特定标签的 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

原文由 Johan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 382
2 个回答

我通常测试 docker images -q 的结果(如在 此脚本 中):

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

但因为 docker images 只需要 REPOSITORY 作为参数,你需要在标签上 grep,而不使用 -q .

docker images 现在使用标签(docker 1.8+) [REPOSITORY[:TAG]]

下面提到的另一种方法是使用 docker inspect

但是对于 docker 17+,图像的语法是: docker image inspect (在不存在的图像上, 退出状态将为 non-0

正如 iTayb评论 中指出的那样:

  • docker images -q 方法在有很多图像的机器上会变得非常慢。在 6,500 张图像的机器上运行需要 44 秒。
  • docker image inspect 立即返回。

正如 亨利布莱思 在评论中指出的那样:

如果你使用 docker image inspect my_image:my_tag ,并且你想忽略输出,你可以添加 --format="ignore me" 它会直接打印出来。

您还可以通过添加 >/dev/null 来重定向标准输出,但是,如果您不能在脚本中执行此操作,则格式选项可以正常工作。

原文由 VonC 发布,翻译遵循 CC BY-SA 4.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 格式。

原文由 Travis Reeder 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题