我正在尝试设置基于Windows nano Server 2019 Build 1809的WindowsContainer的时区。
对于 linux 容器,最简单的方法之一是设置 TimeZone 环境变量,如下所示:
docker run -e TZ=Asia/Kolkata ubuntu date
我们是否有类似的Windows容器。基于一般的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 Nanoserver 2019 Build 1809的Windows容器执行此操作的任何想法?
编辑:正如Pierre-Luc Champigny指出的那样,根据Microsoft,现在LTSC版本和即将推出的版本都支持此功能:https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/virtual-time-zone
tzutil
抛出缺少权限错误- 容器启动时将忽略注册表设置
似乎您必须确保容器主机上的时区正确。这没有多大意义,AFAIK,关于容器的整个事情是将其作为映像一次付并在任何地方运行,具有环境隔离和完整性。右?!
无论如何,您可以在github上看到有关该问题的更多详细信息。
另外,我已经在Windows Server uservoice上打开了这个建议,以改变这种行为。
此外,我还打开了此功能建议,以改进时区的 Azure AKS 主机配置。
自 2021 年 5 月起,在 2105B 服务版本(WS2019 内部版本 10.0.17763.1935)中,现在支持在容器中配置时区的功能。您可以使用 tzutil 或设置时区来设置容器的本地时区配置。
更多信息可在此处获得:https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/virtual-time-zone
您是否尝试使用tzutil
命令?
-
方法一:
以下示例使用该命令并设置澳大利亚时区:
tzutil /s "AUS Eastern Standard Time"
-
方法2:
注册表项
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformation
包含与时区相关的所有信息。从具有正确时区的虚拟机或物理机中,可以导出注册表值并导入到容器。
Tzutil.exe 和 PowerShell 的 Set-时区以及通过系统 API 更改时区的所有应用程序将能够从容器内以--isolation=process
模式设置时区,从 Windows Server 2022 开始。在主机上工作的任何内容都将在容器内工作,包括 DST,即使容器的时区具有与主机不同的 DST 策略,例如,某些区域在不同的日期进入/退出 DST,或者根本不进入/退出 DST。
最初,新的和现有的容器将像以前一样继承主机的时区(时区偏差和所有其他时区设置,例如 DST 策略),但一旦从特定容器实例中设置,有问题的容器将在其余生中保留它,在重新启动后,直到再次更改。
更改特定容器实例中的时区对其他容器没有副作用,当然对主机也没有副作用,反之亦然。
我发现在Windows容器的情况下,它们能够与主机同步,并且相应的时区设置为主机操作系统的时区,因此我们实际上不需要做任何特定的事情来设置docker容器的时区。