
Я создал контейнер docker, который работает в неправильном часовом поясе. Мне лично нужно, чтобы он работал в моем часовом поясе (Европа/Стокгольм, GMT+1). Поскольку проект имеет открытый исходный код, другие пользователи также могут захотеть изменить это. Я хочу, чтобы любой мог легко изменить это, например, в Dockerfile или в docker-compose.yml.
Если возможно, хотелось бы, чтобы решение было применимо не только к CentOS, на случай, если кто-то захочет использовать другой дистрибутив.
Какой подход к установке локального времени/часового пояса в моем контейнере Docker является наиболее независимым от дистрибутива?
Эти два подхода кажутся распространенными, но я не уверен, являются ли они действительно лучшим вариантом для меня:
Переменная окружения TZ
Некоторые дистрибутивы Linux считывают переменную окружения TZ. Однако я заметил, что она не работает, когда я использую образ centos:7
.
/etc/местное время
Вы можете сопоставить контейнеры /etc/localtime
с /etc/localtime
хостом в docker-compose.yml. Но при этом дистрибутивы, которые используют, /etc/timezone
остаются в UTC, а программное обеспечение, которое может это читать, будет читать неправильный часовой пояс.
решение1
Distro-agnostic потребовал бы скрипт, который определяет, какой дистрибутив используется. Это связано с тем, что каждое «семейство» дистрибутивов имеет свой способ обозначения часовых поясов. Для некоторых может сработать добавление следующего в Dockerfile:
ЗАПУСТИТЕ echo "Европа/Стокгольм" > /etc/timezone
В других системах (например, Debian) необходимо использовать указанную выше команду, а затем выполнить другую команду Dockerfile, например:
ЗАПУСК ЗАПУСК sudo dpkg-reconfigure -f неинтерактивный tzdata
Другим дистрибутивам (IIRC, включая CentOS) потребуется что-то вроде:
ЗАПУСТИТЬ ln -s /usr/share/zoneinfo/Europe/Stockhom /etc/localtime
Чтобы сделать его не зависящим от дистрибутива, потребуется изучить метод перенастройки часового пояса в каждом дистрибутиве. Если вы посмотрите на /etc/localtime, вы заметите, что это не текстовый файл.