Настройка часового пояса для контейнера Windows
Я пытаюсь установить часовой пояс WindowsContainer, который основан на Windows Nano Server 2019 Build 1809.
Один из самых простых способов сделать это для контейнеров linux - установить переменную среды TimeZone, как показано ниже:
docker run -e TZ=Asia/Kolkata ubuntu date
У нас есть что-нибудь подобное для Windows Containers. Основываясь на общем подходе Windows, я пытаюсь установить его в сценарии точки входа, используя PowerShell, как (как показано ниже), но это также дает мне ошибку.
Set-TimeZone -Name "India Standard Time"
Set-TimeZone : Access is denied
At line:1 char:1
+ Set-TimeZone -Name "India Standard Time"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : FromStdErr: (:) [Set-TimeZone], Win32Exception
+ FullyQualifiedErrorId : SetTimeZoneFailed,Microsoft.PowerShell.Commands.SetTimeZoneCommand
Любая идея о том, как это можно сделать для контейнеров Windows на основе Windows Nanoserver 2019 Build 1809?
5 ответов
Невозможно правильно установить параметры глобализации, такие как часовой пояс, язык или местоположение Windows, в контейнерах Windows Server Core.
tzutil
выдает ошибку отсутствия привилегий- параметры реестра игнорируются при запуске контейнера
Похоже, вам нужно обеспечить правильный часовой пояс на хосте контейнера. В этом нет особого смысла, AFAIK, вся суть в контейнерах заключается в том, чтобы отправить их как образ один раз и запустить везде, с изоляцией и целостностью среды... верно?!
В любом случае вы можете увидеть более подробную информацию по этой проблеме на github.
Кроме того, я открыл это предложение в пользовательском голосе Windows Server, чтобы изменить это поведение.
Кроме того, я открыл эту функцию для улучшения конфигурации узла Azure AKS для часового пояса.
По состоянию на май 2021 года в служебном выпуске 2105B (сборка WS2019 10.0.17763.1935) теперь поддерживается возможность настройки часового пояса в контейнере. Вы можете использовать tzutil или Set-TimeZone, чтобы установить локальную конфигурацию часового пояса для контейнера.
Дополнительная информация доступна здесь: https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/virtual-time-zone
Вы пытались использовать tzutil
команда?
Способ 1:
Следующий пример использования команды и установки австралийского часового пояса:
tzutil /s "AUS Eastern Standard Time"
Способ 2:
Запись в реестре
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
содержит всю информацию о часовом поясе.С виртуальной или физической машины с правильным часовым поясом вы можете экспортировать значения реестра и импортировать их в контейнер.
Tzutil.exe и Set-TimeZone PowerShell, а также все приложения, изменяющие часовой пояс через системные API, смогут устанавливать часовой пояс из контейнеров в
--isolation=process
режим, начиная с Windows Server 2022. Все, что работает на хосте, будет работать внутри контейнеров, включая DST, даже если часовой пояс контейнера имеет политику DST, отличную от политики хоста, например, некоторые регионы входят / выходят из DST в другую дату или вообще не .
Первоначально новые и существующие контейнеры будут наследовать часовой пояс хоста (смещение часового пояса и все другие параметры часового пояса, такие как политика DST), как и раньше, но после установки из конкретного экземпляра контейнера соответствующий контейнер будет придерживаться его для оставшуюся часть своего жизненного цикла, после перезагрузки, до повторного изменения.
Изменение часового пояса в конкретном экземпляре контейнера не имеет побочного эффекта для других контейнеров и, конечно же, не имеет побочного эффекта для хоста и наоборот.
Я выяснил, что в случае контейнера Windows они могут синхронизироваться с хостом, а соответствующий часовой пояс установлен на тот же часовой пояс ОС хоста, поэтому нам действительно не нужно делать что-либо конкретное, чтобы установить часовой пояс контейнера докеров..