在线上运行 Go 语言中的时间时区 这里的一段代码时,居然报错了,导致程序 panic,错误的内容为:
[root@liqiang.io]# docker run --rm lukelau/test:0.0.1
panic: could not load time location: unknown time zone Asia/Shanghai
这就尴尬了,因为在本地运行得很好的,所以就找了一下,原因发现竟然是因为我用的 Base Image 是 alpine,当然,如果你用的是 busybox 也是会有问题的,因为他们都没有 Go 所需的 timezone 的配置,所以解决办法就是在 Dockerfile 中加入这一段:
[root@liqiang.io]# cat Dockerfile
... ...
FROM golang:1.13-alpine
... ...
FROM alpine
... ...
COPY --from=0 /usr/local/go/lib/time/zoneinfo.zip /opt/zoneinfo.zip
... ...
ENV ZONEINFO /opt/zoneinfo.zip
... ...
这样,Go 运行的时候就会使用 /opt/zoneinfo.zip 这个时区配置文件了。当然,还有其他的处理方法,因为从 Go 的 LoadLocation
这个方法来看,他会尝试在几个地方寻找 timezone 信息,你只要满足它就可以了。