与docker容器共享主机时区



我正在尝试将docker容器的时区与主机同步。我的主机使用ISM,docker容器(使用tomcat映像)默认使用UTC。我读到我们应该装载一个卷来共享主机的时区:

$ docker run -t -i -p 8080:8080 -p 8090:8090 -v /etc/localtime:/etc/localtime:ro tomcat:7.0.69-jre8 /bin/bash

之后,我可以检查检索到的日期是否与主机相同:

$ date
Fri Jul 22 13:53:45 IST 2016

当我部署我的应用程序并尝试更新日期时,我可以看到日期是2016年7月22日,使用的是我的浏览器时区,这与运行docker容器的主机相同。但是,通过对应用程序的服务器端进行调试,我可以看到日期被转换为UTC时区。这意味着docker容器并没有真正使用我装载的主机卷。

我遗漏了什么吗?

我尝试并完成工作的另一种方式是更新docker容器中的时区:

$ dpkg-reconfigure tzdata // Selecting the corresponding options afterwards

通过这种方式,我可以在应用程序的客户端和服务器端看到相同的时区。

在调试并阅读了有关日期和时间的信息后,我认为后端以UTC/GMT存储日期和时间是有道理的,这种方式在保存到数据库中时与客户端的时区无关。因此,更改tomcat服务器时区以匹配主机不是一个好的做法(这应该并不重要)。

我遇到的问题是,前端使用的是日期和时间(UTC/GMT+1),时间设置为00:00,当它到达后端时,日期和时间将转换为UTC/GMT,即前一天的23:00。持久层只是存储日期,这是错误的,因为我们丢失了数据(时间),当我们试图从数据库中检索该记录时,我们会得到没有时间的前一个日期,所以这不是我们预期的结果。

我希望我的解释有意义

最新更新