docker - Docker 容器中的时间
问题描述
在 Docker 容器中,我有几个问题:
- Docker 容器(例如
ubuntu:16.04
)在启动时是否与主机具有相同的时间? - 如果我不干预,时间会保持同步吗?
- 如果我更改主机上的时间,容器的时间是否会 (1) 与开始时间保持同步或 (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
,但我不确定它是否生效。我不确定命令是否错误,或者是否只是其他系统将时间快速重置为正确的时间。
解决方案
如果您在 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 功能)
回答您的问题:
- 是的
- 是的
- 将与主机相同
- 是的,至少有很大的可能性;)
推荐阅读
- javascript - 为什么“For Loop”只迭代一次,即使参数完全有效?
- javascript - 我可以使用事件侦听器在使用 JavaScript 输入电子邮件地址后对其进行验证吗?
- regex - 替换重叠的文本
- java - 如何获取所有 npm 安装日志并将它们写入 java cli 应用程序?
- python - 在 Linux 服务器上运行相同 python 脚本的多个实例
- docker - 无法加载 docker 配置:.docker/features.json:输入/输出错误
- php - 用php将视频原始数据写入字符串
- python - 使用 Selenium Python 时如何从 td 标签获取文本值?
- python - 使用 Postgres 进行 Django 搜索的现代实用选项?需要多个标准,但 icontains 效率太低
- swift - 我的函数有很多“如果”,我该如何构建一个循环来修复它?