Где контейнеры Docker получают информацию о времени? Я создал несколько контейнеров из базового Ubuntu: надежного образа, и когда я запускаю его и запрашиваю «дату», я получаю время UTC.
Некоторое время я обходил это, делая следующее в моем Dockerfile:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Однако почему-то перестал работать. Поиск в Интернете, я увидел ниже предложенный:
docker run -v /etc/timezone:/etc/timezone [image-name]
Оба эти метода правильно устанавливают часовой пояс!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
Кто-нибудь знает, что дает?
Alpine
, вам нужноtzdata
сначала установить , см. Здесь github.com/gliderlabs/docker-alpine/issues/136-v /etc/localtime:/etc/localtime:ro
(CentOS) рода работ. Внутри контейнера в командной строке date возвращает дату в формате ожидаемого часового пояса. НО Дженкинс, бегущий в контейнере, думает, что часовой пояс - UTC. Почему? / etc / localtime является символической ссылкой на ../usr/share/zoneinfo/UTC во встроенном контейнере. Содержимое файла UTC в контейнере теперь является новым часовым поясом. Но jenkins (и, возможно, другое программное обеспечение на основе Java) используют имя символической ссылки, которая все еще "UTC". В поисках решения. , ,Ответы:
Секрет здесь в том, что он
dpkg-reconfigure tzdata
просто создает/etc/localtime
копию, жесткую ссылку или символическую ссылку (символическая ссылка предпочтительнее) для файла в/usr/share/zoneinfo
. Так что это можно сделать полностью из вашего Dockerfile. Рассмотреть возможность:И в качестве бонуса, TZ будет правильно установлен в контейнере.
Это также не зависит от распространения, поэтому работает практически с любым Linux.
Примечание: если вы используете альпийский образ, вы должны установить
tzdata
первый. (см. эту проблему здесь )Выглядит так:
источник
tzdata
пакет для этой работы.TZ
переменную. Мне не нужно было устанавливать символические ссылки или что-то еще.Обычно достаточно установить переменную окружения в контейнере Docker, например, так:
Конечно, это будет работать и с
docker-compose
.источник
ubuntu:16.04
, не былоtzdata
пакета, который следует добавить в Dockerfile.Крепление
/etc/localtime
на изображении, поэтому оно синхронизируется сhost -v
наиболее популярным.Но смотрите выпуск 12084 :
источник
RUN echo "Europe/London" > /etc/timezone
Вы можете добавить свои локальные файлы (/ etc / timezone и / etc / localtime) в виде тома в ваш docker-контейнер.
Обновите ваш
docker-compose.yml
со следующими строками.Теперь время контейнера такое же, как на вашем хосте.
источник
echo "Europe/Paris" > /etc/timezone
перед перезапуском контейнера.В образе Ubuntu 16.04 есть ошибка. Решение было
источник
если вы используете образ докера на основе
ubuntu
:источник
Спасибо VonC за информацию и ссылку на проблему. Это кажется таким запутанным беспорядком, поэтому я проверил свою идею о том, как решить эту проблему, и это, кажется, прекрасно работает.
(следуйте инструкциям, чтобы выбрать мой часовой пояс)
Затем я обновил свои файлы Docker, чтобы отразить это:
Должно быть, с этим что-то не так, потому что кажется, что это слишком легко игнорировать ... Или это приемлемо?
источник
exit
контейнер. Это на Debian.Здесь я добавляю свои два цента, потому что я пробовал несколько из них, но ни один не работал на альпийских изображениях.
Тем не менее, это сделало свое дело:
[ Источник ]
источник
Более общий способ установить часовой пояс в
docker run
аргументах:Или для повторного использования:
источник