Как установить местное время/часовой пояс наиболее универсальным и не зависящим от дистрибутива способом?

Как установить местное время/часовой пояс наиболее универсальным и не зависящим от дистрибутива способом?

Я создал контейнер 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, вы заметите, что это не текстовый файл.

Связанный контент