Виртуализированный часовой пояс
Область применения: 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 с основными серверными компонентами.
После запуска контейнера настройте часовой пояс на соответствие часовому поясу узла (в этом примере это тихоокеанское поясное время), как показано ниже:
PS C:\> tzutil /g Pacific Standard Time
Задайте для узла часовой пояс "Центральноазиатское стандартное время (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 по умолчанию используется тихоокеанское поясное время.
Затем задайте для контейнера часовой пояс "Поясное время Самоа":
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
Теперь часовой пояс контейнера изменен на "Поясное время Самоа", но на узле используется поясное время Центральной Азии. Эта конфигурация сохраняется при сохранении состояния контейнера.
Если вы перезапустите контейнер без сохранения его состояния, для часового пояса задается часовой пояс узла, как показано ниже:
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