环境中获取时间正确,但是通过django获取时间却不对。

前因

原先基于官方python镜像,构建镜像比较大,于是想换到alpine镜像。

bash
1
2
3
# 镜像对比如下
ui:alpine    3.5   0b72b91558c5        About a minute ago   635MB
ui:stretch   3.5   c5f73347b62b        About an hour ago    1.34GB

现象

ui界面上关于时间都比CST时间晚8h。

定位

经研究发现 django 在设置环境的时候会从系统文件 zoneinfo 中读取时区

It must be a timezone your system knows (ie. a file in /usr/share/zoneinfo) for time.tzset() to work properly. 

然而alpine 镜像中并没有/usr/share/zoneinfo这个目录

解决

在Dockerfile处理一下

RUN mkdir -p /usr/share/zoneinfo/Asia && cp /etc/localtime /usr/share/zoneinfo/Asia/Shanghai

然后重新构建一下镜像,完美解决。 ~~