date - 与Docker容器共享主机时区

标签 date docker timezone

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

相关文章:

gradle - 从Gradle构建脚本控制docker-compose

docker - GKE - 在运行时绕过 Pod LoadBalancer(Pod 的外部 IP)到 Pod 的容器 IP 以用于 WebSocket 目的

linux - 无法在 Jenkins Execute Shell 的 docker 容器内执行命令

python - Django 在模板中获取用户时区

javascript - 如果某个值大于或等于 javascript 中的某个值,则想要更改该值

c# - 如何在 c#.net 中对 List<KeyValuePair<string, string[]>> 进行分组

database - session 和数据库的 oracle db 时区, session 区域的更改不起作用

Java 使用时区

java - Easymock 使用日期期望

java - 在java中将时间戳转换为小时