Docker Go 模板提取图像短名称

Docker Go template extract image shortname

我想了解如何在 golang 模板中使用模式匹配或字符串拆分技术等来提取值。例如,我可以从 docker inspect:

中检索以下值
$ docker inspect --format '{{ .Config.Image }}' hello_world-0f87ch
registry.example.com/hello_world:0.1.0

但我需要的是应用一些模式匹配来提取没有标签的图像短名称,如下所示:

$ docker inspect --format '{{ <some templating logic> }}' hello_world-0f87ch
hello_world

这是一个要强调的示例,真实案例场景在配置文件中设置模板格式,因此在运行时将无法访问 bash(因此我不能简单地通过管道传输结果等)。

我是模板语言的新手,所以有人可以帮助进行简单检查(在 /: 之间)吗?

已解决

感谢 invad0r 的回答,管理了它。扩展他写的内容我得到了:

'{{$v1 := split .Config.Image ":"}}{{ $v2 := join $v1 "/" }}{{$v3 := split $v2 "/"}}{{$shortName := index $v3 1}}{{$shortName}}'

Go 的核心 text/template language 相当有限,不包括任何类型的子字符串操作。

在您查看的上下文中,您可以使用任何其他 shell 工具对 docker inspect

的输出进行字符串操作
docker inspect --format '{{ .Config.Image }}' hello_world-0f87ch \
  | sed -e 's@.*/@@' -e 's@:.*@@'

(使用 sed 到 trim 直到并包括最后一个斜杠,以及第一个冒号之后的所有内容)

一个更典型的工作流程将涉及将某种文件签入源代码管理,该文件知道您要尝试的图像 运行(docker-compose.yml 文件、Kubernetes YAML 文件、shell 脚本和 docker run 命令)并将其用作启动容器的主要方式。有一些容器 运行ning 有点不寻常,然后想编写脚本 docker inspect 试图弄清楚你是如何启动它们的。

可以操作模板元素,参见: https://docs.docker.com/config/formatting/

您可以拆分字符串并对其进行迭代。但是我还没有找到获取最后一个元素的方法。

'{{range $v := split .Config.Image "/"}}{{println $v}}{{end}}'