Fuseau horaire virtualisé
S'applique à Windows Server 2022
Les conteneurs Windows prennent en charge la possibilité de gérer une configuration de fuseau horaire virtualisé distincte de l’hôte. Toutes les configurations traditionnellement utilisées pour le fuseau horaire de l’hôte ont été virtualisées et sont instanciées pour chaque conteneur. Avec cette fonctionnalité, les conteneurs Windows offrent les comportements suivants :
- Lors du démarrage du conteneur, le fuseau horaire de l’hôte est hérité et reste dans le conteneur. Si le fuseau horaire de l’hôte change alors que le conteneur est en cours d’exécution, le fuseau horaire stocké dans le conteneur ne change pas. Pour hériter à nouveau du fuseau horaire de l’hôte, le conteneur doit être redémarré.
- Le conteneur conserve la configuration du fuseau horaire de l’hôte qui est observée lors du démarrage du conteneur uniquement jusqu’à ce que l’utilisateur configure explicitement le fuseau horaire à partir du conteneur. Une fois que vous avez défini le fuseau horaire à partir du conteneur, la configuration est virtualisée et le conteneur ne fait plus référence à l’hôte.
- Si vous configurez le fuseau horaire du conteneur et que vous enregistrez par la suite l’état du conteneur, la configuration du fuseau horaire persiste entre les redémarrages.
Toutes les API en mode noyau et en mode utilisateur liées à la configuration du fuseau horaire système sont désormais compatibles avec les conteneurs. Lorsqu’un thread qui s’exécute dans le contexte d’un conteneur appelle une API système pour interroger l’heure locale, il récupère la configuration du fuseau horaire du conteneur au lieu de celle de l’hôte. Les données de fuseau horaire écrites à partir d’un conteneur sont désormais conservées dans un stockage spécifique au conteneur et le conteneur en question n’hérite plus des données de fuseau horaire actuelles de l’hôte au démarrage. Cela signifie qu’une fois que vous avez défini le fuseau horaire, le conteneur continue d’utiliser le fuseau horaire configuré entre les redémarrages. Tous les conteneurs reposant sur une image héritent de la configuration du fuseau horaire, à condition qu’elle ait été définie explicitement dans l’une des couches.
Le tableau suivant indique la build prise en charge pour chaque référence SKU :
SKU | Build prise en charge |
---|---|
Windows Server 2019 | 10.0.17763.1935 ou version ultérieure |
SAC 20H2 | 10.0.19042.985 ou version ultérieure |
Windows Server 2022 | Toutes les versions |
Comment configurer le fuseau horaire du conteneur ?
Tout d’abord, vous avez besoin des versions des hôte et invité qui contiennent cette fonctionnalité, ce qui signifie qu’elles sont exécutées sur un correctif de maintenance 2105B ou version ultérieure. L’exécution de versions antérieures permet simplement de rétablir le comportement du conteneur pour mettre en miroir le fuseau horaire de l’hôte, la configuration n’ayant aucun impact sur l’hôte ni l’invité.
Notes
La configuration du fuseau horaire requiert des privilèges administratifs, en particulier SeTimeZonePrivilege. Le compte ContainerAdministrator dispose de ce privilège. Par conséquent, il est recommandé de procéder à une exécution avec les privilèges minimum nécessaires à votre charge de travail et de réserver le compte ContainerAdministrator pour les tâches administratives, telles que la définition du fuseau horaire.
La méthode recommandée pour configurer le fuseau horaire du conteneur consiste à utiliser l’utilitaire TZUtil.exe ou l’applet de commande Set-TimeZone de PowerShell. Ces utilitaires sont bien gérés et se révèlent pratiques pour définir facilement le fuseau horaire. Toute autre méthode doit interagir directement avec les API système. Les versions de l’image de base avec TZUtil.exe ou PowerShell sont prêtes à l’emploi. L’image de base Nanoserver
est une exception, car cette image ne prend pas en charge TZUtil.exe ni PowerShell par défaut. Par conséquent, elle nécessite un utilitaire personnalisé pour interagir avec les API système. Dans tous les cas, les applications nouvellement écrites ne doivent PAS établir de dépendance sur le fuseau horaire du système d’exploitation, sauf si cela est absolument nécessaire, et elles doivent plutôt en tenir compte dans les données et la logique de l’application.
Exemple d’utilisation de Windows Server 2019
En utilisant la dernière image de base Server Core Windows Server 2019, voici un exemple de définition d’un fuseau horaire virtualisé.
Après avoir démarré le conteneur, définissez le fuseau horaire sur le fuseau horaire de l’hôte (dans cet exemple, il s’agit de l’heure standard du Pacifique), comme indiqué ci-dessous :
PS C:\> tzutil /g Pacific Standard Time
Définissez le fuseau horaire de l’hôte sur l’heure standard de l’Asie centrale (UTC + 6:00) ; notez que l’heure standard du Pacifique apparaît toujours dans le conteneur :
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
Notez que, lorsque vous démarrez le conteneur pour la première fois, la configuration est celle qui a été définie lors de la création de l’image de base jusqu’à ce que vous la définissiez vous-même. Dans la plupart des cas pour les images de base Windows, la valeur par défaut est l’heure standard du Pacifique.
Ensuite, définissez le fuseau horaire du conteneur sur « Heure standard 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
Désormais, le fuseau horaire du conteneur a été mis à jour sur l’heure standard de Samoa, mais l’hôte reste sur l’heure standard de l‘Asie centrale. Cette configuration persiste lors de l’enregistrement de l’état du conteneur.
Si vous redémarrez le conteneur sans avoir enregistré précédemment son état, le fuseau horaire est défini sur le fuseau horaire de l’hôte, comme indiqué ci-dessous :
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