【问题标题】:Will a docker container auto sync time with its host machine?docker 容器会自动与其主机同步时间吗?
【发布时间】:2014-05-13 02:19:50
【问题描述】:

我是否需要 docker 容器内的 NTP 服务器来定期同步时间,或者容器是否会与其主机重新同步时间? docker 容器时区设置正确。

【问题讨论】:

    标签: time timezone clock docker ntp


    【解决方案1】:

    如果您在 OSX 上运行 boot2docker,请查看此问题:https://github.com/boot2docker/boot2docker/issues/290

    时间同步成为一个问题,因为当您的操作系统处于睡眠状态时,boot2docker 主机会出现时间漂移。使用 -v /etc/localtime:/etc/localtime:ro 运行容器无法解决与 docker 容器的时间同步问题

    相反,现在,您必须定期在 OSX 上运行它:

    /usr/local/bin/boot2docker ssh sudo ntpclient -s -h pool.ntp.org
    

    Kitematic 用户更新

    如果您正在运行Kitematic,这是在 OSX 中启动和运行 Docker 的建议机制,您必须定期运行此命令:

    docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'
    

    或者,对于旧版本的 docker

    docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'
    

    适用于 OSX 的新本机 Docker 用户的更新

    新的 Docker Beta 取消了 VirtualBox 和 Docker Machine。 docker 的最新版本(目前为 1.12.1-beta25(build: 11807))似乎能够检测何时出现时间不连续性并进行相应调整。因此,这应该不再是问题......万岁!!

    【讨论】:

    • 非常感谢。这是唯一有效的方法。
    • 查看声称的修复/缓解措施:github.com/boot2docker/boot2docker/pull/661
    • 请注意,对于 Docker for OSX Beta,重新启动容器对我不起作用,重新创建容器也不起作用。相反,我不得不重新启动 Docker 本身(从菜单栏图标)。
    • 我根据这个答案写了一个CLI tool,以每 5 分钟同步一次 docker-machine VM 上的时间。适用于我的 OSX El Capitan 和 Windows 7 Pro
    【解决方案2】:

    https://github.com/sameersbn/docker-gitlab/issues/77

    查看sameersbn的回答。

    option 1: -v /etc/localtime:/etc/localtime:ro
    option 2: -e "TZ=Asia/Shanghai"
    

    【讨论】:

    • 选项 2 对我有用。我实际上喜欢这比其他选项更明确。
    • 谢谢选项 2 也对我有用。由于没有 etc/localtime 文件夹,我在 Mac 上使用选项 1 时出现错误。
    【解决方案3】:

    最简单的解决方案似乎是使用-v /etc/localtime:/etc/localtime:ro 选项运行您的容器。因此:

    #run without tz info:
    docker run --rm -t -i ubuntu date
    Wed Apr  2 18:40:07 UTC 2014
    # run with tz info:
    docker run --rm -t -i -v /etc/localtime:/etc/localtime:ro ubuntu date
    Wed Apr  2 11:40:29 PDT 2014
    

    【讨论】:

    • 我不知道最初的问题是更多关于时区(例如确保容器将遵守 DST 和时区更改)还是准确的时间保持(例如确保容器时钟不会漂移)。如果是关于时区,那么这个答案是完美的。如果是关于时钟漂移,你不用担心:容器的时钟和宿主机的时钟是一样的(除了容器不能改变它,除非它运行在--privileged模式下)。跨度>
    • @jpetazzo 同意;我应该在我的 MWE 中包含对主机上的 date 的调用,否则可能不清楚容器是否从主机获取时间。
    • setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
    • 这似乎不适用于 OSX 上的 docker 1.3。与 Brian Tingle 相同的错误。
    • @esilver boot2docker 默认只能挂载/Users下的子目录
    【解决方案4】:

    在 Docker for Mac OS X Beta 上,我在基于 Alpine Linux 的 VM 上经历了明显的偏差。在Alpine Linux FAQ 中,您可以使用以下命令同步虚拟机的时钟。

    ntpd -d -q -n -p pool.ntp.org
    

    但是,访问 VM 上的终端是另一个问题,如果您使用 screen 命令就可以完成。

    screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
    

    该路径是一个符号链接,在我的系统上指向 /dev/ttys003

    进入后,请注意moby login 只是root,没有密码。完成后,CTRL-A、D 将断开与屏幕会话的连接。

    注意:这曾经记录在Docker for Mac Trouble Shooting,但似乎已被删除。我很幸运在 2016 年 Dockercon 上展示了它。似乎 Docker 试图将虚拟机完全从体验中抽象出来,这就解释了为什么不再记录它。

    【讨论】:

    • 对于没有间歇性 docker-machine 的使用新 RC 的人来说,这应该是新接受的答案
    【解决方案5】:

    docker 上 osx 时间漂移的当前解决方案(2018 年 4 月):

    我的 mac 确实在 NTP 服务器上,但是这个固定的时钟会随着容器而漂移:

    来自https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues

    如果您的系统无法访问 NTP 服务器,那么在休眠后,Docker for Mac 看到的时间可能与主机明显不同步。此外,在使用过程中,时间可能会慢慢偏离同步。要在休眠后手动重置时间,请运行:

    docker run --rm --privileged alpine hwclock -s
    

    或者,要解决这两个问题,您可以将本地时钟添加为主机的低优先级(高层)后备 NTP 时间源。为此,请编辑主机的 /etc/ntp-restrict.conf 以添加:

    server 127.127.1.1              # LCL, local clock
    fudge  127.127.1.1 stratum 12   # increase stratum
    

    然后重启 NTP 服务:

    sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
    sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
    

    【讨论】:

      【解决方案6】:

      docker-compose 用法:

      /etc/localtime:/etc/localtime:ro 添加到volumes 属性。

      看看这个link 来演示一个例子。

      【讨论】:

        【解决方案7】:

        如果您更喜欢 TZ 解决方案,那么尽管您要求自己的时区(目前是 11:09 CDT),但您可能会惊讶地看到显示的 UTC 时间:

        $ docker run --rm -it -e "TZ=America/Chicago" ubuntu date
        Mon Oct 26 16:09:04 America 2020
        

        在实验上,您似乎需要 POSIX TZ 格式:

        $ docker run --rm -it -e "TZ=CST6CDT" ubuntu date
        Mon Oct 26 11:09:17 CDT 2020
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-26
          • 1970-01-01
          • 2012-10-14
          • 1970-01-01
          • 2018-12-08
          • 1970-01-01
          相关资源
          最近更新 更多