【问题标题】:Share host timezone with docker container与 docker 容器共享主机时区
【发布时间】:2016-11-26 09:40:25
【问题描述】:

我正在尝试将 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

这样我可以在应用程序的客户端和服务器端看到相同的时区。

在此致谢

【问题讨论】:

  • 听起来您已经列出了两种与 Docker 一起工作的方式,并且您的应用程序是有问题的部分?不确定我们如何调试您的应用程序,因为我们没有任何详细信息。
  • 我确实列出了两种应该可行的方法,是的,应用程序似乎是有问题的一种。该应用程序是我部署到 tomcat docker 容器中的 GWT 应用程序,我向主机公开了端口,以便能够访问该应用程序并调试该应用程序(您可以在 docker 命令中看到端口 8080 和 8090)。我怀疑与 tomcat docker 容器一起提供的 jdk 出现了问题。

标签: date docker timezone


【解决方案1】:

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

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

我希望我的解释有意义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多