我们今天在 docker inspect 命令中使用格式时遇到了同样的问题。在不修补 Docker 的情况下获取最后一个元素的最简单方法是(为了便于阅读,表达式已分成几行):
{{ $image := "" }}
{{ range split .ContainerImageName "/" }}
{{ $image = . }}{{ end }}
{{ index (split $image ":") 0 }}
所以在我们的例子中,我们需要没有注册地址和版本的镜像名称。例如,像registry.domain.local/images/nginx:latest这样的镜像名称变为nginx。
PS:你需要 Go >= 1.11 才能完成这项工作(https://github.com/golang/go/issues/10608)
PPS:这个问题是关于 Go 模板的,但是对于那些对 Docker 有同样问题的人来说,这里的配置示例:
1) 在中使用 Go 模板daemon.json
cat /etc/docker/daemon.json
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "udp://127.0.0.1:20627",
"tag": "{{ $image := \"\" }}{{ range split .ContainerImageName \"/\" }}{{ $image = . }}{{ end }}{{ index (split $image \":\") 0 }}/{{.Name}}"
}
2)使用带有-f
选项的Go模板:
docker inspect \
-f '{{ $image := "" }}{{ range split .Config.Image "/" }}{{ $image = . }}{{ end }}{{ index (split $image ":") 0 }}' \
<container>