Docker LinuxDocker Desktop

Docker: В контейнере ошибается время после смены часового пояса хоста

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

После смены часового пояса хоста контейнер может продолжать отображать старое местное время: образу не передаётся нужная TZ, отсутствует tzdata либо приложение хранит собственную зону. При этом системное время UTC чаще всего корректное.

В этой статье
  1. Как проявляется проблема и где искать причину
  2. Пошаговая диагностика и устранение
  3. Как проверить результат
  4. Если исправление не помогло

#Как проявляется проблема и где искать причину

После смены часового пояса хоста контейнер может продолжать отображать старое местное время: образу не передаётся нужная TZ, отсутствует tzdata либо приложение хранит собственную зону. При этом системное время UTC чаще всего корректное.

Возможная причинаКак узнатьЧто делать
Локальная зона образаУ контейнера не задана TZ или нет данных часовых поясовdate показывает UTC при ожидаемой местной зонеНастроить TZ в поддерживаемом образе
Зона приложенияJava, Node.js, MySQL или другое приложение использует отдельные настройкиdate корректен, а журнал приложения нетИсправить зону в конфигурации приложения

#Пошаговая диагностика и устранение

  1. 1. Зафиксируйте время хостаНа Linux-хосте в терминале сравните UTC и местную зону, а также установленную зону. В Docker Desktop команды выполняйте в соответствующей виртуальной системе либо проверьте часы операционной системы.
  2. Только Linux с systemd; timedatectl отсутствует на некоторых системах
    Linux · Терминал (Bash)Команда
    Только Linux с systemd; timedatectl отсутствует на некоторых системах.
    date -u; date; timedatectl status
  1. 2. Сравните отображение внутри контейнераПроверьте контейнер, заменив ИМЯ; date должен быть доступен в образе. Сравните UTC с UTC на хосте: если UTC совпадает, проблема относится к часовому поясу, а не к ходу часов.
  2. Не работает в минимальных образах без команды date или в остановленных контейнерах
    Linux · Терминал (Bash)Команда
    Не работает в минимальных образах без команды date или в остановленных контейнерах.
    docker exec ИМЯ date -u
  1. 3. Проверьте локальное время и зонуВыполните date и при поддержке оболочки посмотрите TZ. Если переменная пуста, это не обязательно ошибка: конкретный образ может использовать /etc/localtime.
  2. Контейнер должен работать; команда не изменяет время
    Linux · Терминал (Bash)Команда
    Контейнер должен работать; команда не изменяет время.
    docker exec ИМЯ date
  1. 4. Проверьте образ и документацию приложенияОткройте Dockerfile и документацию базового образа. Для Debian/Ubuntu наличие tzdata и файлы zoneinfo проверяются внутри образа; Alpine без установленной tzdata может не распознавать именованную зону. Не предполагается, что Windows-контейнер поддерживает Linux TZ.
  1. 5. Задайте зону в тестовой конфигурацииДля приложения Linux, поддерживающего TZ, укажите в Compose environment: TZ: Europe/Tallinn (или собственную зону IANA). На Windows используйте принятый для этой платформы способ, не копируйте TZ механически.
  2. Пример под services.<ваш сервис>; по необходимости установите tzdata в образ
    Текст
    Пример под services.<ваш сервис>; по необходимости установите tzdata в образ.
    environment:
      TZ: Europe/Tallinn
  1. 6. Пересоздайте тестовый контейнерПеременные окружения существующего контейнера при обычном рестарте из нового файла не меняются. В тестовом проекте примените изменения с пересозданием сервиса после резервирования данных.
  2. В каталоге Compose-проекта, только тестовая среда; имя сервиса не имя контейнера
    Linux · Терминал (Bash)С осторожностью
    В каталоге Compose-проекта, только тестовая среда; имя сервиса не имя контейнера.
    docker compose up -d --force-recreate ИМЯ_СЕРВИСА

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 7. Сверьте записи и UTCПовторите date -u/date и тест формирования даты в самом приложении. Нужный результат: UTC не изменился, а местное представление и новые журнальные метки соответствуют заданной зоне. Если нет — изучите отдельную настройку зоны в приложении.

#Как проверить результат

Совпадают UTC и местное представление с ожидаемыми значениями; новые события формируются с правильным смещением.

#Если исправление не помогло

Если расхождение наблюдается только в базе данных, проверьте тип TIMESTAMP/DATETIME и часовой пояс сеанса СУБД отдельно; это другая причина.

Так эту ошибку тоже называют

Источники и обновления

Для этой статьи пока не указаны источники. Мы отмечаем такие материалы и дополняем их при проверке.

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.