Time Docker容器:时间/时区错误

Time Docker容器:时间/时区错误,time,docker,timezone,system,systemtime,Time,Docker,Timezone,System,Systemtime,我在一个带节点的运行docker容器中,由于某种原因,主机的时区/时间与docker容器中的时间从未对齐: root@foobar:~# node -e "console.log(new Date())" >> Tue May 17 2016 15:12:43 GMT+0200 (CEST) root@foobar:~# docker exec 9179105c0ff9 node -e "console.log(new Date())" >> Tue May 17 201

我在一个带节点的运行docker容器中,由于某种原因,主机的时区/时间与docker容器中的时间从未对齐:

root@foobar:~# node -e "console.log(new Date())"
>> Tue May 17 2016 15:12:43 GMT+0200 (CEST)
root@foobar:~# docker exec 9179105c0ff9 node -e "console.log(new Date())"
>> Tue May 17 2016 13:13:01 GMT+0000 (Europe)
root@foobar:~# cat /etc/timezone
>> Europe/Vienna
root@foobar:~# docker exec 9179105c0ff9 cat /etc/timezone
>> Europe/Vienna
因此,我在docker start shell脚本中已经做了如下操作:

docker run \
...
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e "TZ=Europe/Vienna" \
...
。。。但是,正如您在第一个代码块中看到的,时间仍然是错误的!有什么想法吗?我错过了什么

(仅供参考:我正在运行通过部署的meteor应用程序)

更新:


在主机上和容器内运行
date
后,再次出现2小时的差异。因此,出于某种原因,docker容器只是不“应用”我的时区,问题似乎与JS/node无关,因为
date
只是一个简单的unix系统cmd
。。。我错过了什么

>2016年5月17日星期二15:12:43 GMT+0200(CEST)

>2016年5月17日星期二13:13:01 GMT+0000(欧洲)

时间大致相同(相差约18秒,因为您没有在同一时间运行这些命令)。 仔细看看,大约是格林尼治时间下午3点+0200,格林尼治时间下午1点+0000。 这只是输出格式的不同,但时间是相同的。 如果对
新日期()
的值执行
.getTime()
,则可能会有相同的值。
这可能是由于不同node.js版本的默认输出格式不同。

我确实意识到这是“相同”的时间。但主机上和容器内的节点版本相同。另外,当我使用
date
仅回显系统时间时,容器和主机之间又存在2小时的差异。由于
date
不是一个JS函数,也不是任何与unix相关的函数,这似乎根本不是JS的问题;TZ=“欧洲/维也纳”日期;docker运行节点日期;docker run-e TZ=“欧洲/维也纳”节点日期2016年5月17日15:54:07 UTC周二2016年5月17日17:54:07 CEST 2016年5月17日15:54:08 UTC 2016年5月17日星期二17:54:09 CEST 2016我在本地有此信息:
docker run-e TZ=“欧洲/维也纳”节点-e“console.log(新日期().getTimezoneOffset())”
=>-120
docker run节点-e”console.log(new Date().getTimezoneOffset())“
=>0,也就是说,docker、我正在使用的docker映像和节点正在使用TZ变量。您正在使用的docker映像是什么?在映像中运行
/usr/bin/env
可以获得TZ变量吗?关于ServerFault有一个答案: