我在一个正在运行的带有节点的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 ..我在这里错过了什么?!
答案 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版本中默认输出格式的差异。