Go 如何创建包含zoneinfo.zip的二进制文件
我正在使用Docker创建一个容器应用程序,然后将其部署到,但当应用程序初始化时,我收到以下错误:Go 如何创建包含zoneinfo.zip的二进制文件,go,kubernetes,containers,google-kubernetes-engine,Go,Kubernetes,Containers,Google Kubernetes Engine,我正在使用Docker创建一个容器应用程序,然后将其部署到,但当应用程序初始化时,我收到以下错误: err: open C:\Go/lib/time/zoneinfo.zip: no such file or directory 看起来您正试图在Windows环境容器上构建Golang exec?您可以尝试使用正确的GOOS=linux(Goose)和GOARCH=amd64(Gorch)进行构建。如果这不起作用,我建议您在Linux容器上本地构建它。当使用Go的时间包,特别是LoadLoc
err: open C:\Go/lib/time/zoneinfo.zip: no such file or directory
看起来您正试图在Windows环境容器上构建Golang exec?您可以尝试使用正确的
GOOS=linux
(Goose)和GOARCH=amd64
(Gorch)进行构建。如果这不起作用,我建议您在Linux容器上本地构建它。当使用Go的时间包,特别是LoadLocation方法时,它会在不同的位置查找信息。这在源代码中的LoadLocation注释中进行了解释。具体地说,它在这些地方看起来:
在我自己解决这个问题的过程中,我最终创建了一个利用LoadLocationFromTZData方法的包,并试图简化提供和使用您自己的时区数据库副本的过程。您可以在此处看到我自己的堆栈溢出问题:。你可以在这里看到我的时区软件包的存储库:我一周前遇到了同样的问题,最后在Dockerfile上解决了这个问题 首先,您需要找到
zoneinfo.zip
文件。例如,在通过brew安装Go的MacOS上,可能会变得棘手
tztest$ go env GOROOT
/usr/local/Cellar/go/1.12.7/libexec
tztest$ ls -l /usr/local/Cellar/go/1.12.7/libexec/lib/time/zoneinfo.zip
-rwxr-xr-x 1 mau staff 365447 Jul 8 16:29 /usr/local/Cellar/go/1.12.7/libexec/lib/time/zoneinfo.zip
因此,解决方法是复制zoneinfo.zip
,并将其包含在Dockerfile的同一目录中。从这里开始,只需将文件添加到docker构建过程并覆盖环境变量
ADD zoneinfo.zip /zoneinfo.zip
ENV ZONEINFO /zoneinfo.zip
你可以考虑建立你的GO应用程序(2020年8月,两年后)
新的嵌入式数据包 Go 1.15包括一个新的包,它允许将时区数据库嵌入到程序中- 导入此软件包(如
)允许程序查找时区信息,即使本地系统上没有时区数据库import u“time/tzdata”
- 您还可以通过使用
构建来嵌入时区数据库-tags timetzdata
这样,一旦作为Docker映像部署到Kubernetes引擎,它就不必尝试加载任何时区信息,因为这些信息嵌入到它的程序中。是的,我使用的是windows,但我在构建二进制文件时这样做了,节点中的操作系统是golang的错误,但我猜您可能编译为非静态二进制文件,可能正在从本地env.time.LoadLocation获取内容,需要zoneinfo.zip加载时区;与此相关谢谢:染料,我真的做到了,对我来说幸运的是,我只需要一个时区,那就是我的时区(至少现在),希望这很快得到修复,357B是zoneinfo.zip的大小,将它添加到二进制文件中不会伤害任何人