登录
首页 >  Golang >  Go问答

在 Docker 容器中找不到 Go 的时区信息路径 /usr/share/zoneinfo

来源:stackoverflow

时间:2024-03-09 23:09:27 260浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《在 Docker 容器中找不到 Go 的时区信息路径 /usr/share/zoneinfo》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

在 go 程序中,我调用 time.loadlocation("europe/berlin") ,它返回一个错误,指出 open /usr/local/go/lib/time/zoneinfo.zip: no such file or directory,即使在容器中(运行 alpine:3.9 并安装了 tzdata) /usr/share/zoneinfo/europe/berlin 存在,并且根据文档,应优先于 zip 文件。同一个程序在我的机器 (arch linux) 上找到该文件。可执行文件在我的机器上静态链接,然后复制到容器中。我尝试了 go 1.11.5 和 1.10.3。

我用以下方法构建了可执行文件:

CGO_ENABLED=0 go build -a -ldflags "-s" -o gocake_static

我正在寻找任何可以帮助我识别问题的想法。


解决方案


如果您仅使用一个静态区域信息。也许 fixedzone 可以解决您的问题。

它不需要timezone.zip,因此不需要下载zoneinfo.zip并在dockerfile中设置env zoneinfo

例如

loc := time.FixedZone("Europe/Berlin", 1*60*60)
fmt.Println(time.Now().In(loc).Format("2006-01-02 15:04:05"))

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>