Docker. Изменить время внутри контейнера

Есть несколько способов задания даты и времени на уже созданном и ещё не созданном docker контейнере с debian.

Первый способ с уже созданным контейнером. Входим в него от суперпользователя:

docker exec -u root -it id_контейнера bash

Выполняем команду:

rm -rf /etc/localtime

ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

echo «Europe/Moscow» > /etc/timezone

Время изменится. Можно сразу проверять:

date

Аналогичное действие можно сделать через директивы в файле docker compose при создании контейнера:

RUN rm -rf /etc/localtime

RUN ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

RUN echo «Europe/Moscow» > /etc/timezone

Второй способ задать время — из docker compose файла при создании контейнера. Добавляем в volumes два системных файла, чтобы время в контейнере всегда совпадало с временем в системе:

volumes:

— /etc/timezone:/etc/timezone:ro

— /etc/localtime:/etc/localtime:ro

Это самый логичный способ для тех проектов, которые сильно гео распределены или имеют базу данных внутри контейнера, куда записывается текущее время/дата.

Если контейнер создаётся не из docker compose файла, а из команды, то можно передать значения в ключах:

… -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro

Третий способ — в docker compose файле добавить директиву для установки значения переменной окружения:

ENV TZ=»Europe/Moscow»



2022-11-03T19:33:11
Сервер