如何查找 Docker 镜像的哈希值?

Tim*_*Tim 2 cut docker

当我使用这个 docker 命令时:

docker inspect 'name of my container' | grep sha256
Run Code Online (Sandbox Code Playgroud)

我得到这个回来:

"Image": "sha256:345hu5j3h53jk234",
Run Code Online (Sandbox Code Playgroud)

如何使用--cut -d 命令仅获取不带引号的sha256:345hu5j3h53jk234 ?

目前我正在尝试类似的事情:

docker inspect 'name of my container' | grep sha256 | cut -d ","-f2
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

Dav*_*aze 5

docker inspect与许多其他列表类型 Docker 命令一样,它采用一个--format选项,允许您使用 Gotext/template语言重新格式化结果。如果您只是想挑选简单的字段,这最有效:

docker inspect container-name -f '{{ .Image }}'
Run Code Online (Sandbox Code Playgroud)

与 JSON 等结构化文件相比,标准 shell 工具更倾向于面向行的文本文件。评论建议使用jq,这将是一个很好的工具。如果这确实不是一个选择,您可以使用sed (1)执行此操作:

docker inspect container-name | sed -ne 's/.*"Image": "\([^"]*\)",$/\1/p'
Run Code Online (Sandbox Code Playgroud)

sed进一步分解该命令:

  • sed -n导致默认情况下不打印行。
  • s/RE/\1/p尝试将当前行与正则表达式进行匹配;如果是,则将该行替换为第一\(...\)组,然后打印它。
  • .*"Image":通过 JSON 标记匹配任意文本"Image":
  • \(...\)捕获一个组进行\1替换。
  • [^"]*匹配任意数量的非双引号字符。
  • ",$匹配双引号、逗号和行尾。

除非您点头同意这个解释,否则我更喜欢docker inspect -fjq方法。