我正在尝试将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
部署应用程序并尝试更新日期时,我可以看到日期22/07/2016正在使用我的浏览器时区,该时区与运行Docker容器的主机相同。但是调试应用程序的服务器端,我可以看到日期已转换为UTC时区。这意味着docker容器并没有真正使用我安装的主机卷。
我有什么想念的吗?
我尝试并完成工作的另一种方法是更新Docker容器中的时区:
$ dpkg-reconfigure tzdata // Selecting the corresponding options afterwards
这样,我可以在应用程序的客户端和服务器端看到相同的时区。
先谢谢了
最佳答案
调试并了解日期和时间后,我认为后端将日期和时间存储在UTC / GMT中是有道理的,这种方式与将客户端保存在数据库中时的时区无关。因此,更改tomcat服务器时区以匹配主机不是一个好习惯(这并不重要)。
我遇到的问题是前端使用日期和时间(UTC / GMT +1),并且时间设置为00:00h,当到达后端时,日期和时间被转换为UTC / GMT,因此前一天的23:00。持久层只是存储错误数据的日期,因为我们丢失了数据(时间),当我们尝试从数据库中检索该记录时,我们将获得没有时间的前一个日期,因此这不是我们期望的结果。
我希望我的解释有意义
关于date - 与Docker容器共享主机时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38527219/