虛擬化時區
適用於: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 基底映射案例中,預設值為 Pacific Standard Time。
接下來,將容器的時區設定為「薩摩亞標準時間」:
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