Docker容器:时间/时区错误

时间:2016-05-17 13:22:32

标签: 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 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" \
...

...但是,正如您在第一个代码块中看到的那样,时间仍然是错误的!有什么想法吗?我错过了什么?

(fyi:我正在运行通过mupx部署的流星应用程序)

更新

在主机上和容器内运行date后,再次出现2小时的差异。所以由于某种原因,docker容器只是没有“应用”我的时区和似乎问题不是JS /节点相关的,因为date只是一个简单的unix系统cmd ..我在这里错过了什么?!

1 个答案:

答案 0 :(得分:2)

>> Tue May 17 2016 15:12:43 GMT+0200 (CEST)

>> Tue May 17 2016 13:13:01 GMT+0000 (Europe)

大约是同一时间(大约18秒差异,因为你没有同时运行命令)。 仔细看看,格林威治标准时间下午3点+ 0200左右,格林威治标准时间+00点左右下午1点左右。 这只是输出格式的差异,但时间是一样的。 如果对.getTime()的值执行new Date(),则可能具有相同的值。 这可能是由于不同node.js版本中默认输出格式的差异。