Va conteneur docker synchronisation automatique de l'heure avec la machine hôte?
6 réponses
si vous utilisez boot2docker sur OSX, voir ce numéro: https://github.com/boot2docker/boot2docker/issues/290
time synch devient un problème parce que l'hôte boot2docker a sa dérive temporelle pendant que votre système d'exploitation est endormi. Le temps de synchronisation avec votre conteneur docker ne peut pas être résolu en lançant votre conteneur avec -v /etc/localtime:/etc/localtime:ro
au lieu de cela, pour l'instant, vous devez l'exécuter périodiquement 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 se mettre en marche sur Docker dans OSX, vous devrez périodiquement exécuter 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 de New native Docker pour OSX
le nouveau Docker Beta supprime VirtualBox et Docker Machine. Les dernières constructions de docker (actuellement, 1.12.1-beta25 (build: 11807)) semblent avoir la capacité de détecter quand il y a eu une discontinuité temporelle et de s'ajuster en conséquence. Cela ne devrait donc 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 de lancer 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 Beta, j'ai connu une dérive significative sur la VM, qui est basée sur Alpine Linux. De Alpine Linux FAQ vous pouvez synchroniser l'horloge de la VM avec la commande suivante.
ntpd -d -q -n -p pool.ntp.org
cependant, obtenir l'accès à un terminal sur la VM est une autre question, qui peut être faite si vous utilisez la commande d'écran.
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 à /dev/ttys003
.
une fois que vous arrivez, notez que le moby login
est tout simplement root
sans mot de passe. Après avoir terminé, CTRL-A, D se déconnectera de la session d'écran.
NOTE: ceci était documenté sur Docker for Mac Trouble Shooting mais cela semble avoir été enlevé. J'ai eu la chance de le voir à Dockercon 2016. Il semble que Docker essaie d'abstraire complètement la VM de l'expérience, ce qui explique pourquoi il n'est plus documenté.
La solution actuelle pour osx temps de dérive sur docker (avril 2018):
j'ai mon mac sur un serveur NTP, mais cette dérive fixe de l'horloge avec des conteneurs:
de https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :
si votre système n'a pas accès à un serveur NTP, alors après un hibernation le temps vu par Docker pour Mac peut être considérablement hors de synchronisation avec l'hôte. De plus, le temps peut lentement dériver hors de la synchronisation pendant l'utilisation. Pour réinitialiser manuellement le temps 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 comme une source de temps NTP de faible priorité (strate élevée) pour l'hôte. Pour ce faire, éditez le fichier /etc/ntp-restrict de l'hôte.conf à ajouter:
server 127.127.1.1 # LCL, local clock
fudge 127.127.1.1 stratum 12 # increase stratum
puis redémarrer le service NTP avec:
sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
docker-composer usage:
ajouter /etc/localtime:/etc/localtime:ro
à l'attribut volumes
.
Regardez ce link pour montrer un exemple.