【问题标题】:Time in a Docker containerDocker 容器中的时间
【发布时间】:2019-02-16 08:22:16
【问题描述】:

我有几个关于 Docker 容器时间的问题:

  1. Docker 容器(例如ubuntu:16.04)在启动时是否与主机具有相同的时间?
  2. 如果我不干预,时间会保持同步吗?
  3. 如果我在主机?
  4. 如果 continer 内的 CRON 作业应该每整小时执行一次 - 是否保证会执行?

我尝试了什么

对于(1),看起来好像是这样($ 是主机,# 是容器):

$ docker run -it ubuntu:18.04 bash
# date --iso-8601=s -u
2018-09-11T18:47:04+00:00
$ date --iso-8601=s -u
2018-09-11T18:47:10+00:00

对于(3),我尝试用sudo date 080622432018更改我的当地时间,但我不确定它是否生效。我不确定命令是否错误,或者只是其他系统将时间快速重置为正确的时间。

【问题讨论】:

    标签: docker cron systemtime


    【解决方案1】:

    如果您在 linux 主机上运行以下命令:

    cat /sys/devices/system/clocksource/clocksource0/current_clocksource
    tsc
    

    您将看到您的内核正在使用(可能和我的一样)TSC,即时间戳计数器 (https://en.wikipedia.org/wiki/Time_Stamp_Counter) - 基于 CPU 的精确时间测量(此处链接到内核参数 https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt#L523)。作为比较,当您在基于 KVM 的 VM 中发出该命令时,您会看到 kvm-clock 有助于处理与时间和完整操作系统虚拟化相关的问题。

    由于 docker 容器是轻量级的 虚拟化 隔离,当您在 docker 容器中运行相同的命令时,您将看到相同的值 - 这意味着容器与主机共享时间。这也意味着容器不能在没有适当权限的情况下更改时间,因为它会更改主机和所有其他容器的时间 - 该权限是 SYS_TIME (https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)

    回答您的问题:

    1. 是的
    2. 是的
    3. 将与主机相同
    4. 是的,至少概率很大;)

    【讨论】:

      【解决方案2】:

      在 docker 容器中导出您的语言环境

      【讨论】:

      • 对不起。 1.容器中的时间取UTC经度0º 2.例如,如果您在容器内交付Web服务器,则需要将服务器时间与本地UTC时间进行sincronice。 2.如果你在容器中安装一个NTP客户端,这样可以同步网络时间。 3. 如果您需要修正时间,也可以在 Dockerfile 中进行:例如 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 ENV TZ America/Bogota。
      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多