为Windows容器设置TimeZone

时间:2019-04-04 11:23:03

标签: powershell docker windows-container windows-server-2019

我正在尝试设置基于Windows nano服务器2019内部版本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容器如何做到这一点的任何想法?

5 个答案:

答案 0 :(得分:2)

您尝试使用M([a,b,c]). 命令吗?

  • 方法1:

    以下是使用命令并设置澳大利亚时区的示例:

    tzutil
  • 方法2:

    注册表项tzutil /s "AUS Eastern Standard Time" 具有与时区有关的所有信息。

    您可以从具有正确时区的虚拟机或物理机上导出注册表值,然后导入到容器中。

答案 1 :(得分:2)

截至 2021 年 5 月,在 2105B 服务版本(WS2019 版本 10.0.17763.1935)中,现在支持在容器内配置时区的功能。您可以使用 tzutil 或 Set-TimeZone 来设置容器本地的时区配置。

此处提供更多信息:https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/virtual-time-zone

答案 2 :(得分:1)

无法在Windows Server Core容器上正确设置全球化设置,例如时区,语言或Windows位置。

  • tzutil抛出权限不足错误
  • 启动容器时忽略注册表设置

似乎您必须确保容器主机上的正确时区。 这没什么意义,AFAIK,关于容器的整个事情是将其作为映像一次发送并在任何地方运行,并且具有环境隔离和完整性 ..对吗?

无论如何,您都可以看到有关该issue on github的更多信息。

此外,我已打开此suggestion on Windows Server uservoice,以更改该行为。

此外,我已经为此时区打开了feature suggestion for improving Azure AKS host configuration

答案 3 :(得分:1)

Tzutil.exe 和 PowerShell 的 Set-TimeZone 以及所有通过系统 API 更改时区的应用程序将能够从 Windows Server 2022 开始以 --isolation=process 模式从容器内设置时区。主机将在容器内工作,包括 DST,即使容器的时区具有与主机不同的 DST 政策,例如某些区域在不同的日期进入/退出 DST,或者根本不。

最初,新的和现有的容器将像以前一样继承主机的时区(时区偏差和所有其他时区设置,例如 DST 策略),但是一旦从特定容器实例中设置,有问题的容器将坚持它在它的余生中一直存在,直到重新启动,直到再次更改。

更改特定容器实例内的时区对其他容器没有副作用,当然对主机也没有副作用,反之亦然。

答案 4 :(得分:0)

我发现,在Windows容器的情况下,它们能够与主机同步,并且相应的时区设置为主机操作系统的时区,因此我们实际上不需要做任何特定的事情来设置TimeZone的docker容器。