Comment s'assurer que le temps de docker est synchronisé avec celui de l'hôte?

j'ai des dockers sur des serveurs Linode. Parfois, je vois que le temps n'est pas juste sur les panneaux. Actuellement, j'ai changé le script d'exécution dans chaque docker pour inclure les lignes de code suivantes.

yum install -y ntp
service ntpd stop
ntpdate pool.ntp.org

ce que je voudrais idéalement faire cependant, c'est que le docker soit synchronisé avec l'hôte. Est-il un moyen de faire cela?

36
demandé sur Ranjith Ramachandra 2014-07-03 14:46:04

11 réponses

la source de cette réponse est le commentaire à la réponse à: est-ce que Docker container auto synchronise le temps avec la machine hôte?

Après avoir examiné la réponse, j'ai réalisé qu'il n'existe aucun moyen d'une dérive de l'horloge aura lieu le conteneur docker. Docker utilise la même horloge que l'hôte et le panneau ne peut pas la modifier. Cela signifie que faire un ntpdate à l'intérieur du docker ne fonctionne pas.

La bonne chose à faire est de mettre à jour l'Heure de l'hôte en utilisant ntpdate

en ce qui concerne les fuseaux horaires de synchronisation, -v /etc/localtime:/etc/localtime:ro fonctionne.

41
répondu Ranjith Ramachandra 2018-08-27 13:26:53

si vous utilisez boot2docker et ntp ne fonctionne pas à l'intérieur de la VM docker (vous êtes derrière un proxy qui ne renvoie pas les paquets ntp) mais votre hôte est synchronisé, vous pouvez exécuter ce qui suit depuis votre hôte:

docker-machine ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"

de cette façon, vous envoyez l'heure courante de votre machine (dans le fuseau horaire UTC) comme une chaîne de caractères pour définir l'heure VM du docker en utilisant date (encore une fois dans le fuseau horaire UTC).

NOTE: dans Windows, à l'intérieur d'un shell bash( du GIT msys), utilisez:

docker-machine.exe ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"
25
répondu gvlx 2015-09-03 07:35:17

c'est ce qui a fonctionné pour moi avec un hôte Fedora 20. J'ai couru un conteneur en utilisant:

docker run -v /etc/localtime:/etc/localtime:ro -i -t mattdm/fedora /bin/bash

initialement /etc/localtime était un lien vers /usr/share/zoneinfo/Asia/Kolkata qui est L'heure normale de L'Inde. L'exécution de date à l'intérieur du conteneur m'a montré la même heure que sur l'hôte. Je suis sorti de la coque et j'ai arrêté le container en utilisant docker stop <container-id> .

ensuite, j'ai supprimé ce fichier et l'ai fait lier à /usr/share/zoneinfo/Singapore pour le tester. Hôte temps a été réglé sur le fuseau horaire de Singapour. Et puis il a fait docker start <container-id> . Puis accéda de nouveau à son shell en utilisant nsenter et découvrit que le temps était maintenant réglé sur le fuseau horaire de Singapour.

docker start <container-id>
docker inspect -f {{.State.Pid}} <container-id>
nsenter -m -u -i -n -p -t <PID> /bin/bash

donc la clé ici est d'utiliser -v /etc/localtime:/etc/localtime:ro quand vous lancez le conteneur pour la première fois. Je l'ai trouvé sur ce lien .

J'espère que ça aidera.

18
répondu Dharmit 2015-08-11 05:31:07

si vous utilisez docker-machine, les machines virtuelles peuvent dériver. Pour mettre à jour l'horloge sur la machine virtuelle sans redémarrer, Lancez:

docker-machine ssh <machine-name|default>
sudo ntpclient -s -h pool.ntp.org

cela mettra à jour l'horloge sur la machine virtuelle en utilisant NTP et ensuite tous les conteneurs lancés auront la date correcte.

9
répondu lukecampbell 2016-07-18 15:09:11

vous pouvez ajouter vos fichiers locaux (/etc/timezone et /etc/localtime) comme volume dans votre conteneur docker.

mettez à jour votre docker-compose.yml avec les lignes suivantes.

volumes:
    - "/etc/timezone:/etc/timezone:ro"
    - "/etc/localtime:/etc/localtime:ro"

maintenant l'heure du conteneur est la même que sur votre hôte

8
répondu thhan 2017-06-08 16:01:53

il semble que vous pouvez dériver dans le temps si vous utilisez Docker Machine, comme cette réponse suggère: https://stackoverflow.com/a/26454059/105562 , dû à VirtualBox.

la solution rapide et facile est de simplement redémarrer votre VM:

docker-machine restart default
5
répondu Travis Reeder 2017-05-23 11:55:07

Pour docker sur macOS, vous pouvez utiliser docker temps de synchronisation de l'agent . Il fonctionne pour moi.

4
répondu cranehuang 2017-03-13 08:39:35

avec docker pour windows j'ai dû cocher

MobyLinuxVM > Settings > Integration Services > Time synchronization 

dans le gestionnaire Hyper-V et cela a fonctionné

3
répondu Christian Opitz 2017-01-21 01:17:54

je faisais face à un décalage horaire de -1hour et 4min

redémarrer Docker lui-même a réglé le problème pour moi.

pour définir le fuseau horaire en général:

  1. SSH dans votre conteneur: docker exec -it my_website_name bash

  2. exécuter dpkg-reconfigure tzdata

  3. exécuter date
3
répondu Stefan 2017-11-22 17:52:27

j'ai le texte suivant dans le fichier composer

volumes:
  - "/etc/timezone:/etc/timezone:ro"
  - "/etc/localtime:/etc/localtime:ro"

puis tout bon dans Gerrit docker avec sa replication_log jeu avec timestamp correct. :- D

2
répondu j3ffyang 2017-12-07 10:01:08

docker-composer usage:

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

version: '3'

services:
  a-service:
      build: .
      image: service-name
      container_name: container-name
      volumes:
        - /etc/localtime:/etc/localtime:ro
0
répondu Benyamin Jafari 2018-08-21 05:46:51