Go在docker容器中找不到/usr/share/zoneinfo

标签 go alpine-linux zoneinfo

在 Go 程序中,我调用 time.LoadLocation("Europe/Berlin") ,它返回一个错误,指出 open/usr/local/go/lib/time/zoneinfo.zip :没有这样的文件或目录,即使在容器中(安装了 tzdata 运行 alpine:3.9)/usr/share/zoneinfo/Europe/Berlin 存在并且,根据 docs ,应优先于 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"))

关于Go在docker容器中找不到/usr/share/zoneinfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54695163/

相关文章:

python - 远程主机时区与本地时区

function - 在 Go 条件模板中使用自定义函数

python - 如何让 file-magic 模块在 Alpine Linux 上运行?

php - 使用 libressl 构建 php 7

linux - 尽管确实存在,但在 Alpine Docker 容器中收到 [Not Found] 错误

php - zoneinfo:新的 right 和 posix 区域名称前缀是什么?

go - 下载前验证请求

go - 是否有可能在 Golang 中有一个返回 Integer 或 Float 的函数?

go - 如何嵌入文件以供以后解析执行使用