【问题标题】:Go doesn't find /usr/share/zoneinfo in docker containerGo 在 docker 容器中找不到 /usr/share/zoneinfo
【发布时间】:2019-07-08 18:15:39
【问题描述】:

在 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 存在,并且根据 docs,应该优先于 zip 文件。相同的程序在我的机器(Arch Linux)上找到该文件。可执行文件在我的机器上静态链接,然后复制到容器中。我试过 Go 1.11.5 和 1.10.3。

我构建了可执行文件:

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

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

【问题讨论】:

  • 您在构建该可执行文件时是否指定了容器的操作系统和架构?你能分享你构建可执行文件的命令吗?
  • ... 是容器上设置的ZONEINFO env 变量,如果是,它的值是多少?
  • @mkopriva 不,我没有。不过,它应该是相同的架构,不是吗?我将构建命令添加到我的问题中。
  • @mkopriva 设置ZONEINFO 变量似乎没有什么不同。我尝试将其设置为/usr/share/zoneinfo
  • 是否安装了tzdata 包? (在官方的 Ubuntu 图像中它不是)。

标签: go alpine zoneinfo


【解决方案1】:

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

它不需要timezone.zip,因此无需下载zoneinfo.zip并在Dockerfile中设置环境ZONEINFO

例如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2021-06-28
    • 2014-11-20
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多