为 Windows 容器设置时区



我正在尝试设置基于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

无法在 Windows Server Core 容器上正确设置全球化设置,如时区、语言或 Windows 位置。
  • 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容器的时区。

相关内容

  • 没有找到相关文章

最新更新