time.LoadLocation 正常工作,但在我的 docker 实例上引发错误!我如何解决它?

Thi*_*obo 1 go docker alpine-linux

time.LoadLocation 正常工作,但在我的 docker 实例上引发错误!我如何解决它?

我跑了

t, err := time.LoadLocation("America/New_York")
Run Code Online (Sandbox Code Playgroud)

即使它在我的电脑和 play.golang.org ( https://play.golang.org/p/4VHlaku26T3 )上运行良好,它也会返回错误

但是,当我在 docker 实例上运行它时,返回了一个错误 unknown time zone America/New_York

为什么它没有检测到我请求的时区?

Thi*_*obo 9

Linux Alpine 本身没有内置时区信息。您需要更新 Dockerfile 以获取该信息。

并将命令添加apk --no-cache add tzdata到 RUN 行

例如,对我来说,我有一条如下所示的行

RUN apk update && apk add bash && apk --no-cache add tzdata

这为我解决了这个问题。


Cra*_*ter 6

对此的一个较新的修复(自 Go 1.15 起)具有在任何平台上工作的优点,即向您的 go 代码添加导入

import _ "time/tzdata"
Run Code Online (Sandbox Code Playgroud)

https://go.dev/doc/go1.15#time/tzdata