共用方式為


虛擬化時區

適用於: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 基底映射,以下是設定虛擬化時區的範例。

  1. 啟動容器之後,請將時區設定為主機的時區(在此範例中為太平洋標準時間),如下所示:

    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