Donner que j'ai déjà changé le fuseau horaire du conteneur docker correctement. Dois-je installer un serveur NTP dans le conteneur de menu fixe pour synchroniser périodiquement l'heure ou le conteneur synchronisera l'heure à partir de sa machine hôte?
Si vous êtes sur OSX et que vous utilisez boot2docker, consultez ce problème: https://github.com/boot2docker/boot2docker/issues/290
La synchronisation temporelle devient un problème car l’hôte boot2docker subit une dérive temporelle lorsque votre système d’exploitation est en veille. La synchronisation du temps avec votre conteneur docker ne peut pas être résolue en exécutant votre conteneur avec -v /etc/localtime:/etc/localtime:ro
Pour le moment, vous devez exécuter périodiquement ceci sur OSX:
/usr/local/bin/boot2docker ssh Sudo ntpclient -s -h pool.ntp.org
Mise à jour pour les utilisateurs de Kitematic
Si vous exécutez Kitematic , qui est maintenant le mécanisme suggéré pour démarrer Docker sous OSX, vous devrez exécuter périodiquement cette commande:
docker-machine ssh default 'Sudo ntpclient -s -h pool.ntp.org'
Ou, pour les anciennes versions de docker
docker-machine ssh dev 'Sudo ntpclient -s -h pool.ntp.org'
Mise à jour pour les utilisateurs du nouveau Docker natif pour OSX
La nouvelle version bêta de Docker supprime VirtualBox et Docker Machine. Les dernières versions de docker (actuellement, 1.12.1-beta25 (build: 11807)) semblent être en mesure de détecter les discontinuités et d’ajuster en conséquence. Ainsi, cela ne devrait plus être un problème ... hourra !!
https://github.com/sameersbn/docker-gitlab/issues/77
Voir la réponse de sameersbn.
option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"
La solution la plus simple semble être d’exécuter votre conteneur avec l’option -v /etc/localtime:/etc/localtime:ro
. Ainsi:
#run without tz info:
docker run --rm -t -i ubuntu date
Wed Apr 2 18:40:07 UTC 2014
# run with tz info:
docker run --rm -t -i -v /etc/localtime:/etc/localtime:ro ubuntu date
Wed Apr 2 11:40:29 PDT 2014
Sur Docker pour Mac OS X Bêta, j'ai constaté une dérive importante sur la machine virtuelle, qui repose sur Alpine Linux. Depuis Alpine Linux FAQ vous pouvez synchroniser l'horloge de la machine virtuelle avec la commande suivante.
ntpd -d -q -n -p pool.ntp.org
Cependant, accéder à un terminal sur VM est une autre question, ce qui peut être fait si vous utilisez la commande screen.
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.AMD64-linux/tty
Ce chemin est un lien symbolique, qui sur mon système pointe sur /dev/ttys003
.
Une fois que vous êtes entré, notez que le moby login
est tout simplement root
sans mot de passe. Une fois que vous avez terminé, CTRL-A, D se déconnectera de la session écran.
NOTE: Ceci était documenté sur Docker pour Mac Dépannage mais cela semble avoir été supprimé. J'ai eu la chance d'être montré à Dockercon 2016. Il semble que Docker tente d'abstraire complètement VM, ce qui explique pourquoi ce n'est plus documenté.
La solution actuelle pour la dérive temporelle osx sur le docker (avril 2018):
J'ai mon mac sur un serveur NTP, mais cette dérive d'horloge fixe avec les conteneurs:
De https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :
Si votre système n'a pas accès à un serveur NTP, après une veille prolongée, l'heure affichée par Docker pour Mac peut être considérablement désynchronisée avec l'hôte. De plus, le temps peut dériver lentement de la synchronisation pendant l'utilisation. Pour réinitialiser manuellement l'heure après l'hibernation, exécutez:
docker run --rm --privileged Alpine hwclock -s
Ou, pour résoudre les deux problèmes, vous pouvez ajouter l'horloge locale en tant que source de temps de repli NTP de priorité basse (couche supérieure) pour l'hôte. Pour ce faire, éditez le fichier /etc/ntp-restrict.conf de l’hôte pour ajouter:
server 127.127.1.1 # LCL, local clock
fudge 127.127.1.1 stratum 12 # increase stratum
Puis redémarrez le service NTP avec:
Sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Ajoutez /etc/localtime:/etc/localtime:ro
à l'attribut volumes
.
Regardez ce link pour montrer un exemple.