【问题标题】:Docker Time Drift on macOSmacOS 上的 Docker 时间漂移
【发布时间】:2018-05-24 02:26:14
【问题描述】:

我的 docker 容器在 mac (v10.13.4) 上运行时遇到了时间漂移:

一个应用正在执行如下代码:

var waitTime = InitialWaitTime;
while(condition) 
{
    Log($"Waiting for {waitTime}");
    await Task.Delay(waitTime, cancelToken);
    waitTime = await TimeSensitiveTask(cancelToken);
}

void Log(string message) 
{
    Console.WriteLine($"[{DateTime.UtcNow:o}] {message}");
}

在应用运行数小时后,使用docker logs -t container_name 会显示带有未来日期的日志。

时间漂移的结果是TimeSensitiveTask 由于提前执行而失败。我确实有一个重试策略,所以在等待更多时间后它最终成功,应用程序运行的时间越长,执行发生的越早。

登录容器并打印当前时间也通过打印未来时间来显示时间漂移。

docker exec -t <container_name> date -u && date -u
Fri May 25 14:28:16 UTC 2018
Fri May 25 14:26:34 UTC 2018

据我了解,docker for mac 的原生版本不应该有这个问题。我能做些什么来解决这个问题?

我已经尝试过将 docker 恢复出厂设置并完全卸载/重新安装 docker。

【问题讨论】:

  • 请包括您在使用 docker 时使用的操作系统(直接,docker-machine、docker-for-mac 等)。有例如github.com/docker/for-mac/issues/17
  • 另请注意,如果你想要一个特定的时间间隔,task.Delay 不是一个合适的调度程序,它会给你一个TimeSensitiveTask 花费的时间间隔。
  • 什么是Log?你能展示一下它的实现吗?
  • 如果时间在不涉及您的代码的情况下漂移,那么这可能根本不是与 C# 相关的问题,而是一个仅限 docker 的问题。
  • 你是说你明白docker mac的原生版本不应该有这个问题,你为什么/如何理解这个?你有关于这个的链接吗?我发现了这个:github.com/docker/for-mac/issues/2076 - 这是你看到的问题吗?

标签: c# docker .net-core


【解决方案1】:

此问题已在 Docker v18.06.0-ce 版本中得到解决。

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2017-02-14
    • 2013-12-15
    • 1970-01-01
    • 2020-06-05
    • 2019-05-05
    • 2016-10-07
    • 1970-01-01
    • 2022-07-09
    相关资源
    最近更新 更多