Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting TimeZone for a Windows Container

I am trying to set the timezone of a WindowsContainer which is based on the windows nano server 2019 Build 1809.

One of the simplest way of doing it for linux containers is to set the TimeZone environment variable as shown below:

docker run -e TZ=Asia/Kolkata ubuntu date

Do we have anything similar for Windows Containers. Based on general windows approach i am trying to set it in the entrypoint script using PowerShell like (as shown below) but it is also giving me an error.

Set-TimeZone -Name "India Standard Time"
Set-TimeZone : Access is denied
At line:1 char:1
+ Set-TimeZone -Name "India Standard Time"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : FromStdErr: (:) [Set-TimeZone], Win32Exception
+ FullyQualifiedErrorId : SetTimeZoneFailed,Microsoft.PowerShell.Commands.SetTimeZoneCommand

Any idea on how this can be done for Windows Containers based on Windows Nanoserver 2019 Build 1809?

like image 496
Soumen Mukherjee Avatar asked Apr 04 '19 11:04

Soumen Mukherjee


4 Answers

Edited: as Pierre-Luc Champigny pointed, according to Microsoft, this is now supported on ltsc versions and upcoming ones: https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/virtual-time-zone

There is no way to properly set globalization settings like Time Zone, Language, or Windows-Location on Windows Server Core containers.
  • tzutil throws lack of privileges error
  • registry settings are ignored when container starts

It seems like you have to ensure the correct Time Zone on container host. That's doesn't make much sense, AFAIK, the whole thing about containers is ship it as image once and run it everywhere, with environment isolation and integrity.. right?!

Anyway you can see more detail on that issue on github.

Also, I've open this suggestion on Windows Server uservoice, to change that behavior.

Also, I've open this feature suggestion for improving Azure AKS host configuration for Time Zone.

like image 145
João Paulo Melo Avatar answered Oct 12 '22 19:10

João Paulo Melo


As of May 2021 in the 2105B servicing release (WS2019 build 10.0.17763.1935) the ability to configure the time zone within a container is now supported. You can use either tzutil or Set-TimeZone to set a time zone configuration local to the container.

More info is available here: https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/virtual-time-zone

like image 35
Brandon Smith Avatar answered Oct 12 '22 20:10

Brandon Smith


Did you try to use the tzutil command?

  • Method 1:

    Following an example to use the command and set an Australian time zone:

    tzutil /s "AUS Eastern Standard Time"
    
  • Method 2:

    The registry entry HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation has all the information relating to timezone.

    From a virtual or physical machine with the correct time zone, you can export the registry values and import to the container.

like image 20
Leandro Scardua Avatar answered Oct 12 '22 20:10

Leandro Scardua


Tzutil.exe and PowerShell's Set-TimeZone as well as all apps changing the timezone through the system APIs will be able to set the timezone from within containers in --isolation=process mode starting from Windows Server 2022. Whatever works on the host will work inside containers, including DST even if the container's timezone has a different DST policy than the host, for example some regions enter/exit DST at a different date, or not at all.

Initially, new and existing containers will inherit the host's timezone (the timezone bias and all other timezone settings, such as the DST policy) as previously, but once set from within a particular container instance, the container in question will stick to it for the rest of its lifetime, ever across reboots, until changed again.

Changing the timezone within a particular container instance has no side effect on other containers, and of course no side effect on the host and vice-versa.

like image 40
Axel Rietschin Avatar answered Oct 12 '22 21:10

Axel Rietschin