【问题标题】:Docker container date/time totally different to host PCDocker 容器日期/时间与主机 PC 完全不同
【发布时间】:2016-10-11 19:00:49
【问题描述】:

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

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 小时的时间内返回相同的结果。

【问题讨论】:

  • 您的主机使用的是哪个时区?
  • UTC + 1(伦敦)。请注意,第一个命令给出了正确的 UTC+1 日期/时间。第二个命令对于 UTC 不正确(在输出中返回) - 我会在问题中澄清。
  • 我刚刚在 PC 上重置了 docker,现在时间是正确的,尽管它不是在 PC 启动时自动出现的。似乎当我启动电脑时它第一次出现时它有错误的时间,但如果我重置它,它会得到正确的时间。我会尝试确认这一点,如果是这样,请将其作为分析器。

标签: date time docker


【解决方案1】:

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

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

当您在其他任何地方(例如,在 Windows 或 MacOS 下)运行 docker 时,还有一个额外的层在起作用:docker 生成一个 Linux 虚拟机(过去使用 VirtualBox,尽管我认为它们可能take advantage of other options these days)然后运行 ​​docker虚拟机内部。

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

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

【讨论】:

  • 谢谢,这一切都很有用。我当然已经重新启动了容器,重建了容器,当然每次我的 PC 重新启动时引擎都会重新启动。我还没有尝试重启机器。如果这有什么不同,我会报告。
  • 当我在 powershell 上尝试 docker-machine 命令时,例如docker-machine ls,返回一个空列表,docker-machine active,返回“No active host found”。尽管当我执行 docker ps 时,我有一个容器正在运行,如图所示。所以仍然无法更改为现在导致我出现问题的正确时间。有什么想法吗?
  • 我刚刚重置了 docker,现在时间是正确的。似乎当我启动电脑时它第一次出现时它有错误的时间,但如果我重置它,它会得到正确的时间。我会尝试确认这一点,如果是这样,请将其作为分析器。
【解决方案2】:

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

只需要重启locker,一旦docker启动,它会同步时间和时间到localhost机器:)

【讨论】:

  • 这解决了我的时间漂移​​问题。似乎在运行 Docker 的情况下让您的笔记本电脑进入睡眠状态会导致这种情况
  • 我发现是 docker 时间不对,没想到重启能解决问题
【解决方案3】:

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

$vm = Get-VM -Name DockerDesktopVM

$feature = "时间同步"

禁用-VMIntegrationService -vm $vm -Name $feature

启用-VMIntegrationService -vm $vm -Name $feature

【讨论】:

  • Get-VM 术语不被识别为 cmdlet 术语......
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    重新启动我的电脑可以为我解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多