关于docker下容器和宿主机器时间不一致问题

在前几天,在阿里云的ECS上部署一个docker应用时,发现部署的应用在请求第三方应用时,一直出现超时的异常提示,刚开始觉得是第三方应用系统的问题(此系统无赖躺枪,反正也不是一次两次了,多躺几回也就习惯了~),最后发现是容器的时间和数组的时间不一致,差了八小时。在上网查阅相关资料后,问题解决。这里就简单作个记录下。redis


Docker容器时间与主机时间不一致

经过date命令查看时间docker

查看主机时间数组

[root@izuf6gb2498ykvhcb4np5pz ~]# date
Sun Jul 15 15:30:41 CST 2018

查看容器时间tomcat

root@b43340ecf5ef:/#date 
Sun Jul 15 15:31:10 UTC 2018

能够发现,他们相隔了8小时。微信

  • CST应该是指(China Shanghai Time,东八区时间)
  • UTC应该是指(Coordinated Universal Time,标准时间)

因此,只须要容器时区和宿主一致便可。ui

共享主机的localtime (方法一)阿里云

建立容器的时候指定启动参数,挂载localtime文件到容器内 ,保证二者所采用的时区是一致的。日志

docker run --name <name> -v /etc/localtime:/etc/localtime:ro

复制主机的localtime (方法二)code

docker cp /etc/localtime:【容器ID或者NAME】/etc/localtime

在完成后,再经过date命令进行查看当前时间。blog

建立自定义的dockerfile (方法三)

建立dockerfile文件,其实没有什么内容,就是自定义了该镜像的时间格式及时区。

FROM redis
FROM tomcat
ENV CATALINA_HOME /usr/local/tomcat
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && echo 'Asia/Shanghai' >/etc/timezone \

保存后,利用docker build命令生成镜像使用便可。

Docker容器时间与tomcat时间不一致

在容器和宿主一致后,在满怀欣喜的重启容器后,发现最后时间仍是不对。。发现tomcat输出的日志仍是不一致的,这人生就很尴尬了。。

在tomcat/bin/catalina.sh文件中修改tomcat JAVA_OPTS,添加以下内容

JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"

自此,问题解决。访问第三方应用也一切正常了,它真的是莫名躺枪了。哈哈哈

老生常谈

  • 我的QQ:499452441
  • 微信公众号:lqdevOps

我的博客:https://blog.lqdev.cn

本文地址:https://blog.lqdev.cn/2018/07/15/docker/docker-time-diff/

撤~

相关文章
相关标签/搜索