Fuso horário virtualizado
Aplica-se a: Windows Server 2022
Os contêineres do Windows dão suporte à manutenção de uma configuração de fuso horário virtualizado separada do host. Todas as configurações que são usadas tradicionalmente para o fuso horário do host foram virtualizadas e é criada uma instância delas para cada contêiner. Com esse recurso, os contêineres do Windows oferecem os seguintes comportamentos:
- Ao iniciar o contêiner, o fuso horário do host é herdado e permanece no contêiner. Se o fuso horário do host mudar enquanto o contêiner estiver em execução, o fuso horário armazenado no contêiner não será alterado. Para herdar novamente o fuso horário do host, o contêiner deverá ser reiniciado.
- O contêiner mantém a configuração de fuso horário do host que é observada ao iniciá-lo somente até que o usuário configure explicitamente o fuso horário de dentro do contêiner. Após você definir o fuso horário de dentro do contêiner, a configuração será virtualizada e o contêiner não se referirá mais ao host.
- Se você configurar o fuso horário do contêiner e, posteriormente, salvar o estado do contêiner, a configuração de fuso horário persistirá após as reinicializações.
Todas as APIs de modo de kernel e modo de usuário relacionadas à configuração do fuso horário do sistema têm reconhecimento de contêineres. Quando um thread em execução no contexto de um contêiner chama uma API do sistema para consultar a hora local, ele recupera a configuração de fuso horário do contêiner em vez da do host. Agora, os dados de fuso horário gravados de dentro de um contêiner persistem no armazenamento específico do contêiner, e o contêiner em questão não herda mais os dados de fuso horário atuais do host durante a inicialização. Isso significa que, após você definir o fuso horário, o contêiner continuará usando o fuso horário configurado após reinicializações. Todos os contêineres criados com base em uma imagem herdam a configuração de fuso horário, desde que ela tenha sido definida explicitamente dentro de uma das camadas.
A seguinte tabela mostra o build com suporte para cada SKU:
SKU | Build com suporte |
---|---|
Windows Server 2019 | 10.0.17763.1935 ou posterior |
20H2 SAC | 10.0.19042.985 ou posterior |
Windows Server 2022 | Todas as versões |
Como configurar o fuso horário do contêiner?
Primeiro, você precisa das versões de host e convidado que têm esse recurso, o que significa executar um patch de serviço 2105B ou superior. Executar versões anteriores apenas faz com que o contêiner volte a espelhar o fuso horário do host, sem que a configuração tenha impacto sobre o host ou o convidado.
Observação
Para configurar o fuso horário, é necessário ter privilégios administrativos, especificamente SeTimeZonePrivilege. A conta ContainerAdministrator tem esse privilégio. Portanto, a recomendação é executar com os privilégios mínimos necessários para sua carga de trabalho e reservar a conta ContainerAdministrator para tarefas administrativas, como definir o fuso horário.
A maneira recomendada de configurar o fuso horário do contêiner é por meio do utilitário TZUtil.exe ou do cmdlet Set-TimeZone do PowerShell. Esses utilitários são bem mantidos e oferecem a conveniência de definir o fuso horário facilmente. Qualquer outro método precisa interagir diretamente com as APIs do sistema. As versões de imagem base com TZUtil.exe ou PowerShell incluídas funcionam imediatamente. A imagem base Nanoserver
é uma exceção, pois ela não tem suporte para TZUtil.exe nem para o PowerShell por padrão e, portanto, requer um utilitário personalizado para interagir com as APIs do sistema. Em todo caso, aplicativos escritos recentemente NÃO devem ter uma dependência do fuso horário do sistema operacional a menos que seja absolutamente necessário. Em vez disso, eles devem levar esse aspecto em conta dentro dos dados e da lógica do aplicativo.
Exemplo usando o Windows Server 2019
Veja a seguir um exemplo de como definir um fuso horário virtualizado usando a imagem base mais recente do Windows Server 2019 Server Core.
Após iniciar o contêiner, defina o fuso horário como o fuso horário do host (neste exemplo, Hora Padrão do Pacífico), conforme ilustrado:
PS C:\> tzutil /g Pacific Standard Time
Defina o fuso horário do host como Horário Padrão da Ásia Central (UTC+6:00) e perceba que o Horário Padrão do Pacífico ainda é exibido no contêiner:
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
Observe que, ao iniciar o contêiner pela primeira vez, a configuração terá o valor usado ao criar a imagem base até que você a defina por conta própria. Na maioria dos casos para imagens base do Windows, o padrão é a Hora Padrão do Pacífico.
Em seguida, defina o fuso horário do contêiner como "Hora Padrão 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
O fuso horário do contêiner foi atualizado para a Hora Padrão de Samoa, mas o host permanece no fuso da Hora Padrão da Ásia Central. Essa configuração persiste ao salvar o estado do contêiner.
Se você reiniciar o contêiner sem salvar o estado dele, o fuso horário será definido como o fuso horário do host, conforme ilustrado:
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