1

使用buildah,我可以通过此调用找出我的图像的构建日期:

buildah images --format '{{.CreatedAt}}' my_image

--format参数是一个 Go 模板,如相关命令所述

这将返回:

Nov 13, 2018 08:04

据我所知,这是我当前使用的时区,但它不是本地化的,并且缺少时区信息。如果我像这样将输出输入 Linux date

date -d "`buildah images --format '{{.CreatedAt}}' my_container`" +%s

这给了我我想要的 UNIX 纪元秒数:

1542063840

但是,由于 my'{{.CreatedAt}}'是一个我应该能够格式化的 Go 模板,我怎样才能直接打印出 epoch seconds (或RFC-3339等)而不是依赖date.

你可以猜到,我是一个完全的 Go 新手,文档没有提供任何我可以复制粘贴的内容


注意:按照以下答案,增强请求发布到buildah问题 db

4

1 回答 1

2

不幸的是,你运气不好。

传递给模板执行的参数值是类型imageOutputParams,声明在images.go

type imageOutputParams struct {
    Tag       string
    ID        string
    Name      string
    Digest    string
    CreatedAt string
    Size      string
}

如您所见,该CreatedAt字段是 type string,而不是 a time.Time,因此您不能time.Time在其上调用方法。如果没有自定义注册函数,您也不能对其进行任何有用的日期/时间处理。但是由于您只是提供模板文本,因此您也不能注册自定义函数。

您传递的模板在这样的函数中执行outputUsingTemplate()

err = tmpl.Execute(os.Stdout, params)

params上述结构的值在哪里。

CreatedAt建议项目所有者添加一个包含时间戳作为值的新字段time.Time,以便您可以使用Time.Unix(). 模板将如下所示:

{{.CreatedAtTime.Unix}}
于 2019-01-07T09:20:55.127 回答