前言
写完一段golang后写了Dockerfile把程序部署到Docker容器中,由于程序中涉及到日志打印(使用log.Printf
打印日志),发现日志打印的时间是UTC时区,而我所在的时区是CST时区,查阅资料过程中提取到两个关键词$TW
、/etc/localtime
,两个共同作用决定终端下date
命令输出代表的时区。
终端下的时区设置
当环境变量$TW
没有设置时,date
按照/etc/localtime
指定的时区输出,通过file /etc/localtime
可以看到这是一个软链接。
/etc/localtime: symbolic link to `../usr/share/zoneinfo/Asia/Shanghai'
root权限下,$TW
环境变量没有设置。
$TW
变量可以设置为以/usr/share/zoneinfo
为相对路径的路径例如TW=America/Los_Angeles
、TW=Aisa/Shanghai
Docker容器中的时区设置
容器的时区设置和终端下的时区设置类似,默认时区由基础镜像决定,即Dockerfile中的FROM指定的镜像,golang镜像的默认时区是UTC0
可以在Dockerfile中通过ENV
设置环境变量或者docker run -e $TW=Asia/Shanghai
来设置时区