Go排坑之路:panic: time: missing Location in call to Time.In

背景

项目迁移至docker环境部署,原本正常的接口,突然报错失败。查看日志得到:panic: time: missing Location in call to Time.In

排查

项目中我们封装了时间转换的方法,如下:

当系统执行到local, _ := time.LoadLocation("Asia/Shanghai")时发生报错。

分析

我们常用的linux系统,诸如,ubuntucentos等,在/usr/share/zoneinfo/目录下存放了各个时区。

项目打包后我们使用了alpine镜像,该镜像/usr/share/zoneinfo/并没有这个目录。

解决

我们自己编译一个包含zoneinfo的镜像。

执行命令docker build -t pangou/alpine-tz .进行编译。

完成编译后,推送至仓库, docker push pangou/alpine-tz

仓库地址:https://hub.docker.com/r/pangou/alpine-tz

docker-compose 替换镜像执行,验证成功。