在Docker容器中的时间

时间:2018-09-11 18:56:00

标签: docker cron systemtime

在Docker容器中,我有时会遇到几个问题:

  1. 启动时,Docker容器(例如ubuntu:16.04)与主机的时间相同吗?
  2. 如果我不干涉,时间会保持同步吗?
  3. 如果我更改容器上的时间,容器的时间是(1)与开始时间保持同步还是(2)与主机保持同步或(3)未定义还是(4)其他时间?主机?
  4. 如果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更改本地时间,但是我不确定它是否生效。我不确定命令是否错误,或者只是其他系统将时间快速重置为正确的时间。

2 个答案:

答案 0 :(得分: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,它有助于处理与时间和完整OS虚拟化有关的问题。

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

回答您的问题:

  1. 将与主机相同
  2. 是的,至少有很高的概率;)

答案 1 :(得分:-1)

将您的语言环境导出到Docker容器中