Va conteneur docker synchronisation automatique de l'heure avec la machine hôte?

donnant J'ai déjà changé le fuseau horaire du conteneur docker correctement. Dois-je installer un serveur NTP à l'intérieur du conteneur docker pour synchroniser périodiquement l'heure ou le conteneur synchronisera l'heure à partir de sa machine hôte?

89
demandé sur vantt 2014-04-02 06:51:38

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

99
répondu esilver 2016-09-12 17:50:26

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"
42
répondu user3908675 2014-08-05 02:46:18

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
40
répondu shabbychef 2014-04-02 18:42:52

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

23
répondu Martin Woolstenhulme 2016-08-18 22:10:48

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
1
répondu Steve Kallestad 2018-04-28 23:19:21

docker-composer usage:

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

Regardez ce link pour montrer un exemple.

0
répondu Benyamin Jafari 2018-08-21 05:55:40