当我在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小时内返回相同的结果。
答案 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 为我解决了问题。