虛擬化時區
適用于: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 基底映射,以下是設定虛擬化時區的範例。
啟動容器之後,在此範例中,將時區設定為主機的時區 (,其為 Pacific Standard Time) ,如下所示:
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