Время в контейнере Docker - PullRequest
       49

Время в контейнере Docker

0 голосов
/ 11 сентября 2018

У меня есть пара вопросов относительно времени в контейнере 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 голосов
/ 12 сентября 2018

Если вы запускаете следующую команду на хосте Linux:

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

Вы увидите, что ваше ядро ​​использует (вероятно, мое) TSC, что такое Time Stamp Counter (https://en.wikipedia.org/wiki/Time_Stamp_Counter)) - точное измерение времени на основе CPU (здесь ссылка на параметр ядра https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt#L523). в качестве сравнения когда вы выполните эту команду внутри виртуальной машины на основе KVM, вы увидите там kvm-clock, который помогает решать проблемы, связанные со временем и полной виртуализацией ОС.

Поскольку docker-контейнер является легковесным виртуализация изоляция, когда вы запускаете ту же команду в Docker-контейнере, вы увидите то же значение - это означает, что контейнер совместно использует время с хостом. Это также означает, что контейнер не может изменить время без надлежащих привилегий, потому что он изменит время хоста и всех других контейнеров - эта привилегия SYS_TIME (https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)

)

Отвечая на ваши вопросы:

  1. да
  2. да
  3. будет таким же, как хост
  4. Да, по крайней мере, есть большая вероятность;)
0 голосов
/ 11 сентября 2018

экспорт ваших локалей в докер-контейнер

...