虛擬化時區

適用于:Windows Server 2022

Windows 容器支援維護與主機不同的虛擬化時區設定。 傳統上用於主機時區的所有設定都已虛擬化,而且會針對每個容器實例。 使用這項功能,Windows 容器會提供下列行為:

  • 啟動容器時,會繼承主機的時區,並保留在容器內。 如果主機的時區在執行容器時變更,則儲存在容器內的時區不會變更。 若要重新繼承主機的時區,必須重新開機容器。
  • 容器會保留主機的時區設定,只有在 使用者從容器內明確設定時區之前,才會在啟動容器時觀察到。 設定容器內的時區之後,組態就會虛擬化,而且容器不再參考主機。
  • 如果您設定容器的時區,然後儲存容器的狀態,時區設定會在重新開機時持續存在。

所有與系統時區設定相關的核心模式和使用者模式 API 現在都是容器感知。 當在容器內容中執行的執行緒呼叫系統 API 以查詢當地時間時,它會擷取容器的時區設定,而不是主機的 。 從容器內寫入的時區資料現在會保存在容器特定的儲存體中,而有問題的容器不再繼承主機在啟動期間的目前時區資料。 這表示一旦您設定時區,容器就會在重新開機時繼續使用設定的時區。 在映射之上建置的任何容器只要在其中一個圖層內明確設定,就會繼承時區組態。

下表顯示每個 SKU 支援的組建:

SKU 支援的組建
Windows Server 2019 10.0.17763.1935 或更高版本
20H2 SAC 10.0.19042.985 或更高版本
Windows Server 2022 所有版本

如何?設定容器的時區嗎?

首先,您需要包含此功能的 主機和客 體版本,這表示在 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 基底映射,以下是設定虛擬化時區的範例。

  1. 啟動容器之後,在此範例中,將時區設定為主機的時區 (,其為 Pacific Standard Time) ,如下所示:

    PS C:\> tzutil /g
    Pacific Standard Time
    
    
  2. 主機 的時區設定為中部標準時間 (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 基底映射的大部分情況下,預設值會是 Pacific Standard Time。

  3. 接下來,將容器的時區設定為「墨西哥標準時間」:

    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
    

    現在,容器的時區已更新為墨西哥標準時間,但主機會保留在中部標準時間。 儲存容器的狀態時,此組態會持續存在。

  4. 如果您重新開機容器而不儲存其狀態,時區會設定為主機的時區,如下所示:

    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