代码之家  ›  专栏  ›  技术社区  ›  John Balvin Arias

如何创建包含zoneinfo.zip的二进制文件

  •  1
  • John Balvin Arias  · 技术社区  · 6 年前

    kubernetes engine 但当应用程序初始化时,我得到以下错误:

    err: open C:\Go/lib/time/zoneinfo.zip: no such file or directory
    

    enter image description here

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   Slotheroo    6 年前

    当使用Go的时间包,特别是LoadLocation方法时,它会查找 time zone database 不同地点的信息。在源代码的LoadLocation注释中对此进行了解释 https://golang.org/src/time/zoneinfo.go . 特别是在这些地方:

    1. 由ZONEINFO环境变量指定的位置
    2. $GOROOT中的zoneinfo.zip文件

    Detect if ZONEINFO fails in Go . 您可以在这里看到我的时区包的存储库: https://github.com/slotheroo/knozone

        2
  •  4
  •   VonC    4 年前

    with Go 1.15 (2020年8月,两年后)

    新的嵌入式数据包

    time/tzdata

    • 导入此包(作为 import _ "time/tzdata" )允许程序查找时区信息,即使时区数据库在本地系统上不可用。
    • -tags timetzdata

    任何一种方法都会将程序的大小增加大约800KB。

    这样一来,一旦作为Docker映像部署到Kubernetes引擎,它就不必尝试加载任何时区信息,因为这些信息嵌入到它的程序中。

        3
  •  1
  •   Rico    6 年前

    GOOS=linux GOARCH=amd64 (戈尔奇)。如果这不起作用,我建议您在Linux容器上本地构建它。

        4
  •  1
  •   coffekid    5 年前

    首先,你需要找到 zoneinfo.zip

    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
    

    所以解决方法是复制 区域信息.zip 并包含在Dockerfile的同一目录中。从这里开始,只需将文件添加到docker构建过程并重写环境变量

    ADD zoneinfo.zip /zoneinfo.zip
    ENV ZONEINFO /zoneinfo.zip