概述
有时我们在用docker时总会发现Docker容器时间与主机时间不一致,其实在docker容器和系统时间不一致是因为docker容器的原生时区为0时区,而国内系统为东八区,这里不深究,主要介绍怎么解决。
问题
我们可以直接通过date命令查看主机时间和容器时间
![8de17d045cfdf814ba70455646661c11.png](https://i-blog.csdnimg.cn/blog_migrate/873f32fe5e008e74333cb5ba19cc4f06.jpeg)
可以发现,他们相隔了7个小时。
PDT(Pacific Daylight Time)太平洋夏季时间
UTC(Coordinated Universal Time)标准时间
所以,这2个时区的时间实际上应该相差7个小时。
ps: 所以没有设置过的容器, 一般跟宿主机时间会有差别。
那我们解决容器时间与主机时间不一致的思路就是统一两者的时区。
共享主机的localtime
创建容器的时候指定启动参数,挂载localtime文件到容器内 ,保证两者所采用的时区是一致的。
docker run --name -v /etc/localtime:/etc/localtime:ro ....
复制主机的localtime
docker cp /etc/localtime:【容器ID或者NAME】/etc/localtime
在完成后,再通过date命令进行查看当前时间。
但是,在容器中运行的程序的时间不一定能更新过来,比如在容器运行的MySQL服务,在更新时间后,必须要重启Docker容器,才能读取到更改过后的时间。
创建自定义的dockerfile
创建dockerfile文件,其实没有什么内容,就是自定义了该镜像的时间格式及时区。
FROM redisFROM tomcat ENV CATALINA_HOME /usr/local/tomcat #设置时区RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# UbuntuRUN echo “Asia/shanghai” 》 /etc/timezone;
保存后,利用docker build命令生成镜像使用即可。
![d38bbc8345f6f41b6e055eb1b7a19159.png](https://i-blog.csdnimg.cn/blog_migrate/b67323eb509ce385d97160fb49a0dbc0.jpeg)
![768415ad5bc1ce97a51061004e88a65c.png](https://i-blog.csdnimg.cn/blog_migrate/57b426f109c6aa73a9bd64089f4029e0.jpeg)
关于容器时间与主机时间不一致的问题的三种解决方式大家有空可以自己测试一下,这里就不多做介绍了,会分享更多devops和DBA方面内容,感兴趣的朋友可以关注一下~
![c85c0b4ceffb79d79b2d9a79e130fb2d.gif](https://i-blog.csdnimg.cn/blog_migrate/17d3557b60b5a1a3b148ceba07307ad9.gif)