Zona horaria virtualizada

Se aplica a: Windows Server 2022

Los contenedores de Windows admiten la capacidad de mantener la configuración de una zona horaria virtualizada independiente del host. Todas las configuraciones usadas tradicionalmente para la zona horaria del host se han virtualizado y se han convertido en instancias para cada contenedor. Con esta característica, los contenedores de Windows ofrecen los siguientes comportamientos:

  • Al iniciar el contenedor, la zona horaria del host se hereda y permanece dentro del contenedor. Si la zona horaria del host cambia mientras se ejecuta el contenedor, la zona horaria almacenada en el contenedor no cambia. Para volver a heredar la zona horaria del host, se debe reiniciar el contenedor.
  • El contenedor mantiene la configuración de la zona horaria del host que se observa cuando se inicia solo hasta que el usuario configure explícitamente la zona horaria desde dentro del contenedor. Cuando establece la zona horaria desde dentro del contenedor, la configuración se virtualiza y el contenedor ya no hace referencia al host.
  • Si configura la zona horaria del contenedor y, posteriormente, guarda el estado del contenedor, la configuración de la zona horaria se conserva entre reinicios.

Todas las API de modo kernel y modo de usuario relacionadas con la configuración de la zona horaria del sistema ahora son compatibles con el contenedor. Cuando un subproceso que se ejecuta en el contexto de un contenedor llama a una API del sistema para consultar la hora local, recupera la configuración de la zona horaria del contenedor en lugar de la del host. Los datos de zona horaria escritos desde dentro de un contenedor ahora se conservan en un almacenamiento específico del contenedor y el contenedor en cuestión ya no hereda los datos de la zona horaria actual del host durante el inicio. Esto significa que, una vez establecida la zona horaria, el contenedor sigue utilizando la zona horaria configurada entre reinicios. Los contenedores basados en una imagen heredan la configuración de la zona horaria siempre que se establezca explícitamente en una de las capas.

En la siguiente tabla se muestra la compilación compatible para cada SKU:

SKU Compilación compatible
Windows Server 2019 10.0.17763.1935 o superior
20H2 SAC 10.0.19042.985 o superior
Windows Server 2022 Todas las versiones

Cómo configurar la zona horaria del contenedor

En primer lugar, necesita versiones del host y del invitado que contengan esta característica, lo que significa que se ejecuta en una revisión de mantenimiento 2105B o superior. La ejecución de versiones anteriores simplemente revierte el comportamiento del contenedor al reflejo de la zona horaria del host sin que la configuración afecte al host o al invitado.

Nota

La configuración de la zona horaria requiere privilegios administrativos, en concreto SeTimeZonePrivilege. La cuenta ContainerAdministrator tiene este privilegio. Por lo tanto, la recomendación es realizar la ejecución con los privilegios mínimos necesarios para la carga de trabajo y reservar la cuenta ContainerAdministrator para tareas administrativas, como establecer la zona horaria.

La manera recomendada de configurar la zona horaria del contenedor es mediante la utilidad TZUtil.exe o el cmdlet Set-TimeZone de PowerShell. Estas utilidades se mantienen bien y ofrecen comodidad para establecer fácilmente la zona horaria. Cualquier otro método debe interactuar directamente con las API del sistema. Las versiones de la imagen base que incluyen TZUtil.exe o PowerShell funcionarán directamente. La imagen base Nanoserver es una excepción, ya que esta no admite TZUtil.exe ni PowerShell de forma predeterminada, por lo que requiere una utilidad personalizada para interactuar con las API del sistema. En cualquier caso, las aplicaciones escritas recientemente NO deben tomar ninguna dependencia de la zona horaria del sistema operativo a menos que sea absolutamente necesario y, en su lugar, deben representarla con los datos y la lógica de la aplicación.

Ejemplo con Windows Server 2019

Con la imagen base de Server Core de Windows Server 2019 más reciente, a continuación se muestra un ejemplo para establecer una zona horaria virtualizada.

  1. Después de iniciar el contenedor, establezca la zona horaria en la del host (en este ejemplo, es la hora estándar del Pacífico), como se muestra a continuación:

    PS C:\> tzutil /g
    Pacific Standard Time
    
    
  2. Establezca la zona horaria del host en Hora estándar de Asia Central (UTC+6:00) y observe que la hora estándar del Pacífico sigue apareciendo en el contenedor:

    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
    

    Tenga en cuenta que, al iniciar el contenedor por primera vez, la configuración se establece en los valores definidos al crear la imagen base hasta que la establezca usted. En la mayoría de los casos de imágenes base de Windows, el valor predeterminado será la hora estándar del Pacífico.

  3. A continuación, establezca la zona horaria del contenedor en "Hora estándar de Samoa":

    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
    

    Ahora, la zona horaria del contenedor se ha actualizado a la hora estándar de Samoa, pero el host permanece en la hora estándar de Asia Central. Esta configuración se conserva al guardar el estado del contenedor.

  4. Si reinicia el contenedor sin guardar previamente el estado, la zona horaria se establecerá en la del host, como se muestra a continuación:

    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