web-dev-qa-db-fra.com

La synchronisation automatique du conteneur docker sera-t-elle avec la machine hôte?

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?

93
vantt

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 !!

100
esilver

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"
45
user3908675

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
42
shabbychef

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é.

23

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
1
Steve Kallestad

utilisation de docker-compose:

Ajoutez /etc/localtime:/etc/localtime:ro à l'attribut volumes.

Regardez ce link pour montrer un exemple.

0
Benyamin Jafari