当我使用这个 docker 命令时:
docker inspect 'name of my container' | grep sha256
我得到了这个:
"Image": "sha256:345hu5j3h53jk234",
如何使用 --cut -d 命令 只获取不带引号的 sha256:345hu5j3h53jk234?
目前我正在尝试类似的事情:
docker inspect 'name of my container' | grep sha256 | cut -d ","-f2
但是不起作用。
docker inspect
采用 --format
选项,可让您使用 Go text/template
语言重新格式化结果。如果您只是想挑选简单的字段,这最有效:
docker inspect container-name -f '{{ .Image }}'
标准 shell 工具比 JSON 等结构化文件更面向行文本文件。有评论建议使用
jq
,这将是一个很好的工具。如果这确实不是一个选择,您可以使用 sed(1): 执行此操作
docker inspect container-name | sed -ne 's/.*"Image": "\([^"]*\)",$/\1/p'
进一步分解
sed
命令:
sed -n
导致默认情况下不打印行。s/RE/\1/p
尝试将当前行与正则表达式进行匹配;如果是,则将该行替换为第一个 \(...\)
组,然后打印它。.*"Image":
通过 JSON "Image":
标记匹配任意文本。\(...\)
捕获一组用于 \1
替换。[^"]*
匹配任意数量的非双引号字符。",$
匹配双引号、逗号和行尾。除非您点头同意这个解释,否则我更喜欢
docker inspect -f
或 jq
方法。
基于 David 的 answer(已投票)构建的,但经过测试可与最新的 Docker (v24.0.5) 一起使用:
$ docker inspect mirekphd/ml-cpu-py311-jup-cust:latest -f '{{ .ContainerConfig.Image }}'