Docker容器的日期/时间与主机PC

时间:2016-10-11 19:00:49

标签: date time docker

当我在PC上运行docker容器时,它与主机PC的日期/时间完全不同。请参阅以下命令。容器识别器Dev的时间是前一天,不同的小时,主机的不同分钟。知道发生了什么事吗?

PS C:\Users\Bobby> date
11 October 2016 19:51:38

PS C:\Users\Bobby> docker exec recognizerDev date
Mon Oct 10 21:43:54 UTC 2016

当我尝试在AWS linux主机上运行相同的事情时,日期/时间是正确的,除了由于时区造成的1小时差异。

请注意,第一个命令按照我的PC返回UTC + 1(伦敦)中的正确时间/日期。第二个命令表示它是UTC格式,但这不是正确的,因为它会在1小时内返回相同的结果。

5 个答案:

答案 0 :(得分:3)

这只是部分答案(因为它不一定能解决问题),但可能有助于诊断。

当您在Linux下运行docker时(如在AWS主机上),您只是在主机上运行进程。也就是说,docker run fedora ls与运行ls之间没有实质性差异,除了前者对系统资源的看法略有不同。容器中报告的时间将始终与主机上报告的时间匹配,模数时区设置。

当您在其他任何地方运行docker时(例如,在Windows或MacOS下),还有一个正在运行的附加层:docker生成Linux虚拟机(历史上使用VirtualBox,虽然我认为它们可能take advantage of other options these days)然后在虚拟机内运行docker。

因为这实际上是与主机不同的机器,所以可能会有时间漂移。有多种方法可以解决此类问题,包括在虚拟机内运行ntp或运行特殊的客户代理,以保持与主机保持同步的时间。我不太了解Docker如何配置这些系统以了解它们是如何或者是否明确地处理它。

如果您的docker vm已经运行了很长一段时间,只需重新启动它就可以解决问题。可能docker machine restart是你需要的。

答案 1 :(得分:2)

对于某些仍在寻找如何纠正日期和时间的人,不确定这是否对您有用,但是在我使用Windows时会发生。

只需重新启动更衣室,并且一旦docker启动,它将时间和时间同步到本地主机:)

答案 2 :(得分:2)

如果您不想重新启动docker,则以下脚本可以通过Windows PowerShell同步时间并通过Windows PowerShell禁用和重新启用时间同步

$ vm = Get-VM-名称DockerDesktopVM

$ feature =“时间同步”

Disable-VMIntegrationService -vm $ vm -Name $ feature

Enable-VMIntegrationService -vm $ vm -Name $ feature

答案 3 :(得分:0)

您可以尝试通过将以下几行添加到 docker compose 文件来指定您希望从主机 PC 获取时间设置

volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

答案 4 :(得分:-1)

重新启动我的 PC 为我解决了问题。