在线上运行 Go 语言中的时间时区 这里的一段代码时,居然报错了,导致程序 panic,错误的内容为:

  1. [[email protected].io]# docker run --rm lukelau/test:0.0.1
  2. panic: could not load time location: unknown time zone Asia/Shanghai

这就尴尬了,因为在本地运行得很好的,所以就找了一下,原因发现竟然是因为我用的 Base Image 是 alpine,当然,如果你用的是 busybox 也是会有问题的,因为他们都没有 Go 所需的 timezone 的配置,所以解决办法就是在 Dockerfile 中加入这一段:

  1. [[email protected].io]# cat Dockerfile
  2. ... ...
  3. FROM golang:1.13-alpine
  4. ... ...
  5. FROM alpine
  6. ... ...
  7. COPY --from=0 /usr/local/go/lib/time/zoneinfo.zip /opt/zoneinfo.zip
  8. ... ...
  9. ENV ZONEINFO /opt/zoneinfo.zip
  10. ... ...

这样,Go 运行的时候就会使用 /opt/zoneinfo.zip 这个时区配置文件了。当然,还有其他的处理方法,因为从 Go 的 LoadLocation 这个方法来看,他会尝试在几个地方寻找 timezone 信息,你只要满足它就可以了。

Ref