虚拟化时区
适用于:Windows Server 2025、Windows Server 2022、Windows Server 2019、
Windows 容器支持维护独立于主机的虚拟化时区配置的功能。 传统上用于主机时区的所有配置都已虚拟化,并为每个容器实例化。 借助此功能,Windows 容器提供以下行为:
- 启动容器时,将继承主机的时区并保留在容器中。 如果主机的时区在容器运行时发生更改,则存储在容器中的时区不会更改。 若要重新继承主机的时区,必须重启容器。
- 容器会保留主机的时区配置,仅在用户从容器中显式配置时区后,才会在启动容器时观察到该配置。 从容器中设置时区后,配置将虚拟化,容器不再引用主机。
- 如果配置容器的时区,并随后保存容器的状态,则时区配置会在重新启动时保留。
与系统时区配置相关的所有内核模式和用户模式 API 现在都是容器感知的。 当在容器上下文中运行的线程调用系统 API 来查询本地时间时,它会检索容器的时区配置,而不是主机的时区配置。 从容器中写入的时区数据现在保留在特定于容器的存储中,相关的容器在启动时不再继承主机的当前时区数据。 这意味着,设置时区后,容器将继续在重新启动时使用配置的时区。 只要在其中一个层中显式设置时区配置,则在映像基础之上构建的任何容器都会继承该配置。
下表列出了每个 SKU 所支持的版本:
SKU | 支持的内部版本 |
---|---|
Windows Server 2019 | 10.0.17763.1935 或更高版本 |
20H2 SAC | 10.0.19042.985 或更高版本 |
Windows Server 2022 | 所有版本 |
Windows Server 2025 | 所有版本 |
如何配置容器的时区?
首先,需要同时拥有包含此功能的主机和客户机版本,这意味着要在 2105B 服务补丁或更高版本上运行。 运行早期版本只是将容器的行为还原为镜像主机时区,配置不会影响主机或来宾。
注意
配置时区需要管理权限,特别是 SeTimeZonePrivilege。 ContainerAdministrator 帐户具有此权限。 因此,建议使用工作负荷所需的最低权限运行,并为管理任务保留 ContainerAdministrator 帐户,例如设置时区。
配置容器时区的建议方法是通过 TZUtil.exe 实用工具或 PowerShell 的 Set-TimeZone cmdlet。 这些实用工具维护良好,为轻松设置时区提供了便利。 任何其他方法都需要直接与系统 API 交互。 带有 TZUtil.exe 或 PowerShell 的基本映像版本将开箱即用。 Nanoserver
基础映像是一个例外,因为此映像默认不支持 TZUtil.exe 或 PowerShell,因此需要自定义实用工具才能与系统 API 交互。 在任何情况下,新编写的应用程序不应依赖于操作系统时区 除非绝对必要,而是应在应用程序数据和逻辑中考虑它。
使用 Windows Server 2019 的示例
使用 Windows Server 2019 Server Core 基础映像,下面是设置虚拟化时区的示例。
启动容器后,将时区设置为主机的时区(在此示例中,它是太平洋标准时间),如下所示:
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