Docker 时区问题定位以及解决

来源:互联网 发布:ps淘宝模板制作教程 编辑:程序博客网 时间:2024/06/15 18:11

之前在docker启动的服务中,运行的有java和golang的程序,通常会出现时区问题,下面先看个列子
代码很简单,打印出时间

package mainimport (    "fmt"    "time")func main() {    fmt.Println(time.Now())}

如果运行机器时间没有问题,当然可以正确输出,先看机器时间

dateWed Aug 23 07:50:26 CST 2017

再看一下程序输出,都是标准的北京时间

./time 2017-08-23 07:53:04.087431036 +0800 CST

没有问题,现在把程序达到容器内运行

FROM golang:1.7.3ADD time /rootCMD ["sh","-c","/root/time"]

此时输出结果如下

dateWed Aug 23 00:00:07 UTC 2017./time2017-08-22 23:55:08.547500771 +0000 UTC

容器内采用的是UTC时间,导致晚了八个小时,CST=UTC/GMT +8 小时。
如果此时想设置成北京的时间的话,有两种解决方案,第一个是修改容器时区

# CentOSRUN echo "Asia/shanghai" > /etc/timezone;# UbuntuRUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

第二种方案,更简单,直接把宿主机的时间设置挂载到容器里面,通过docker run -v的方式直接挂载

-v /etc/localtime:/etc/localtime:ro 

这种方案需要注意/etc/timezone内容,因为代码中会用到这个设置,也要改成上海时区。最后测试一下,两种方案都是可行的。

原创粉丝点击