Existe-t-il un moyen de définir l'heure système d'un conteneur Docker de manière dynamique (au moment de l'exécution) sans affecter la machine hôte?
En utilisant
hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"
donne l'erreur suivante:
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.
En utilisant
date -s "2 OCT 2006 18:00:00"
donne l'erreur suivante:
date: cannot set date: Operation not permitted
Cas d'utilisation:
J'ai besoin de tester un logiciel sensible au temps (le comportement dépend de la date).
Autres cas d'utilisation courants:
- exécution d'un logiciel hérité avec des bogues y2k
- test des logiciels pour la conformité à l'année 2038
- débogage des problèmes liés au temps, tels que les certificats SSL expirés
- exécuter un logiciel qui cesse de fonctionner en dehors d'un certain délai
- processus de construction déterministes.
Réponses:
C'est possible
La solution est de le truquer dans le récipient. Cette bibliothèque intercepte tous les programmes d'appels système utilisés pour récupérer l'heure et la date actuelles.
La mise en œuvre est simple. Ajoutez des fonctionnalités à votre Dockerfile, le cas échéant:
N'oubliez pas de définir les variables d'environnement
LD_PRELOAD
avant d'exécuter l'application à laquelle vous voulez appliquer le temps factice.Exemple:
Vous pouvez maintenant modifier dynamiquement l'heure des serveurs:
Exemple:
la source
Jenny D a raison, car par défaut, le conteneur Docker ne permet pas d'accéder à l'horloge système.
Cependant, sous Linux, si votre conteneur a accès à cette capacité, vous pouvez autoriser cette capacité en utilisant l'option "--cap-add = SYS_TIME" de la commande "docker run" lors de la création de votre conteneur:
Ensuite, vous pouvez modifier l'heure depuis l'intérieur du conteneur en cours d'exécution:
Documentation de référence: https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
la source
Démarrez le conteneur avec une variable d'environnement supplémentaire:
la source
solution docker-compose:
Ajoutez
/etc/localtime:/etc/localtime:ro
à l'volumes
attribut.Regardez ce lien pour un exemple.
la source