仮想化されたタイム ゾーン

適用対象: Windows Server 2022

Windows コンテナーでは、ホストとは別の、仮想化されたタイム ゾーンの構成を保持する機能がサポートされています。 従来はホストのタイム ゾーン用に使用されていた構成がすべて仮想化され、コンテナーごとにインスタンス化されています。 この機能により、Windows コンテナーでは次の動作が提供されます。

  • コンテナーを起動すると、ホストのタイム ゾーンが継承され、コンテナー内に残ります。 コンテナーの実行中にホストのタイム ゾーンが変更された場合、コンテナー内に保存されているタイム ゾーンは変更されません。 ホストのタイム ゾーンを再継承するには、コンテナーを再起動する必要があります。
  • ユーザーがコンテナー内からタイム ゾーンを明示的に構成するまでは、コンテナーの起動時に確認されたタイム ゾーンの構成がコンテナーで保持されます。 コンテナー内からタイム ゾーンを設定すると、構成が仮想化され、コンテナーがホストを参照しなくなります。
  • コンテナーのタイム ゾーンを構成し、その後でコンテナーの状態を保存した場合は、タイム ゾーンの構成が再起動後も保持されます。

システム タイム ゾーンの構成に関連するすべてのカーネル モード API およびユーザー モード 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 コマンドレットを使用する方法です。 これらのユーティリティは適切に管理されており、タイム ゾーンを簡単に設定することができます。 他の方法ではすべて、システム 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 の基本イメージではほとんどの場合、既定値は太平洋標準時になります。

  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