Виртуализированный часовой пояс

Область применения: Windows Server 2022

Контейнеры Windows поддерживают возможность сохранять конфигурацию виртуализированного часового пояса отдельно от узла. Все конфигурации, которые традиционно использовались для часового пояса узла, были виртуализированы и теперь предоставляют экземпляр для каждого контейнера. С этой функцией контейнеры Windows имеют следующее поведение:

  • При запуске контейнера часовой пояс узла наследуется и сохраняется в контейнере. Если часовой пояс узла изменяется во время работы контейнера, часовой пояс, хранящийся в контейнере, не будет изменен. Чтобы повторно наследовать часовой пояс узла, контейнер необходимо перезапустить.
  • Контейнер сохраняет конфигурацию часового пояса узла, которая регистрируется при запуске контейнера только до тех пор, пока пользователь явно не настроит часовой пояс в контейнере. После настройки часового пояса в контейнере конфигурация виртуализируется, а контейнер больше не ссылается на узел.
  • Если вы настроите часовой пояс контейнера и сохраните состояние контейнера, конфигурация часового пояса будет сохраняться и после перезагрузки.

Все API режима ядра и режима пользователя, связанные с конфигурацией часового пояса системы, теперь поддерживают контейнеры. Когда поток, работающий в контексте контейнера, вызывает системный API для получения местного времени, он получит конфигурацию часового пояса контейнера, а не узла. Данные часового пояса, записанные из контейнера, теперь сохраняются в хранилище контейнера, а сам такой контейнер больше не наследует данные о текущем часовом поясе узла при запуске. Это означает, что после настройки часового пояса контейнер будет использовать настроенный часовой пояс и после перезагрузок. Все контейнеры, созданные на основе образа, наследуют конфигурацию часового пояса, если она явно задана в одном из слоев.

В таблице ниже приведены сведения о поддерживаемой сборке для каждого SKU:

номер SKU Поддерживаемая сборка
Windows Server 2019 10.0.17763.1935 или более поздняя версия
20H2 SAC 10.0.19042.985 или более поздняя версия
Windows Server 2022 Все версии

Как настроить часовой пояс контейнера?

Во-первых, вам нужны версии узла и гостевой системы с поддержкой такой функции, то есть с исправлением 2105B или более поздней версии. При использовании более ранних версий поведение контейнера будет просто меняться на зеркалирование часового пояса узла, а конфигурация не будет действовать для узла или гостевой системы.

Примечание

Для настройки часового пояса требуются права администратора, а именно разрешение SeTimeZonePrivilege. Учетная запись ContainerAdministrator имеет такое разрешение. Поэтому мы рекомендуем использовать минимальные разрешения, необходимые для вашей рабочей нагрузки, и использовать учетную запись ContainerAdministrator только для задач администрирования, например для настройки часового пояса.

Мы рекомендуем настраивать часовой пояс контейнера с помощью служебной программы TZUtil.exe или командлета PowerShell Set-TimeZone. Эти служебные программы постоянно обновляются и позволяют легко настроить часовой пояс. Любой другой метод требует напрямую взаимодействовать с системными API. Версии базовых образов с TZUtil.exe или PowerShell будут работать без дополнительной настройки. Базовый образ Nanoserver является исключением, так как этот образ не поддерживает TZUtil.exe или PowerShell по умолчанию, поэтому при работе с ним требуется специализированная служебная программа для взаимодействия с системными API. В любом случае новые записанные приложения НЕ должны принимать зависимость от часового пояса операционной системы, если только это не абсолютно необходимо, но должны учитывать его в данных и логике приложения.

Пример с использованием Windows Server 2019

Ниже приведен пример настройки виртуализированного часового пояса с использованием последней версии базового образа Windows Server 2019 с основными серверными компонентами.

  1. После запуска контейнера настройте часовой пояс на соответствие часовому поясу узла (в этом примере это тихоокеанское поясное время), как показано ниже:

    PS C:\> tzutil /g
    Pacific Standard Time
    
    
  2. Задайте для узла часовой пояс "Центральноазиатское стандартное время (UTC+6:00)" и обратите внимание, что часовой пояс "Тихоокеанское стандартное время" по-прежнему действует для контейнера:

    PS C:\> Get-TimeZone
    
    Id                         : Pacific Standard Time
    DisplayName                : (UTC-08:00) Pacific Time (US & Canada)
    StandardName               : Pacific Standard Time
    DaylightName               : Pacific Daylight Time
    BaseUtcOffset              : -08:00:00
    SupportsDaylightSavingTime : True
    

    Обратите внимание, что при первом запуске контейнера конфигурация задается в соответствии с конфигурацией при создании базового образа, если только вы не настроите ее самостоятельно. В большинстве случаев для базовых образов Windows по умолчанию используется тихоокеанское поясное время.

  3. Затем задайте для контейнера часовой пояс "Поясное время Самоа":

    PS C:\> tzutil /s "Samoa Standard Time"
    PS C:\> tzutil /g
    Samoa Standard Time
    PS C:\> Get-TimeZone
    
    Id                         : Samoa Standard Time
    DisplayName                : (UTC+13:00) Samoa
    StandardName               : Samoa Standard Time
    DaylightName               : Samoa Daylight Time
    BaseUtcOffset              : 13:00:00
    SupportsDaylightSavingTime : True
    

    Теперь часовой пояс контейнера изменен на "Поясное время Самоа", но на узле используется поясное время Центральной Азии. Эта конфигурация сохраняется при сохранении состояния контейнера.

  4. Если вы перезапустите контейнер без сохранения его состояния, для часового пояса задается часовой пояс узла, как показано ниже:

    PS C:\>tzutil /g
    Central Asia Standard Time
    PS C:\> Get-TimeZone
    
    Id                         : Central Asia Standard Time
    DisplayName                : (UTC+06:00) Astana
    StandardName               : Central Asia Standard Time
    DaylightName               : Central Asia Daylight Time
    BaseUtcOffset              : 06:00:00
    SupportsDaylightSavingTime : False