【docker&timezone】关于docker容器的时区/时间设置问题

一、问题背景

在我们平时使用docker容器运行我们的应用的时候,访问应用页面的时间与现在相差x个小时,无法结合时间点去判断当时服务的异常。

宿主机一般会根据所在区域,设置特定的时区,如Asia/ShanghaiAmerica/Los_Angeles等等,而docker容器默认使用UTC 时间。



二、处理方法


方式一:容器使用UTC 时间,前端、后端应用代码做逻辑处理,根据浏览器获取到用户时区,用用户时区展示页面,具有通用性


Docker化部署java应用,jvm读取的是容器中的UTC时间。

前端、后端应用代码做逻辑处理

前端应用,应该根据浏览器时区,以浏览器时区展示,而不是在相关页面上显示为UTC 时间。



方式二:通过挂载的方式,将宿主机时区挂载到docker容器中,使得两者时间显示一直,不具有通用性,是临时解决方案


# cat /etc/systemd/system/mysqld.service

# timedatectl

# ls -l /etc/localtime

# docker exec -it mysql date



用  -v  /etc/localtime:/etc/localtime 形式,将时区文件挂载

注意:此方式只针对 宿主机和容器的时区文件均为 /etc/localtime,不用类型的宿主机操作系统或者容器基础镜像,时区文件不一样

# cat /etc/systemd/system/mysqld.service


# timedatectl

# ls -l /etc/localtime

# docker exec -it mysql date




三、参考


How to make sure docker's time syncs with that of the host?

https://stackoverflow.com/questions/24551592/how-to-make-sure-dockers-time-syncs-with-that-of-the-host


5 ways to change time in Docker container

https://bobcares.com/blog/change-time-in-docker-container


关于Docker部署java应用时间和系统时间不匹配的问题

https://blog.csdn.net/qq_17153579/article/details/77278511


修改使用Alpine Linux的Docker容器的时区

https://wiki.alpinelinux.org/wiki/Setting_the_timezone

你可能感兴趣的:(【docker&timezone】关于docker容器的时区/时间设置问题)