it-swarm.com.de

Wie kann sichergestellt werden, dass die Uhrzeit des Dockers mit der des Hosts synchronisiert wird?

Ich habe Docker auf Linode-Servern. Manchmal sehe ich, dass die Zeit auf den Hafenarbeitern nicht stimmt. Derzeit habe ich das Ausführungsskript in jedem Docker so geändert, dass es die folgenden Codezeilen enthält.

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

Was ich jedoch idealerweise tun möchte, ist, dass der Docker die Zeit mit dem Host synchronisieren soll. Gibt es eine Möglichkeit, dies zu tun?

49

Die Quelle für diese Antwort ist der Kommentar zur Antwort unter: Wird der Docker-Container automatisch mit dem Host-Computer synchronisiert?

Nachdem ich mir die Antwort angesehen hatte, wurde mir klar, dass es auf keinen Fall zu einer Zeitverschiebung auf dem Docker-Container kommen kann. Docker verwendet dieselbe Uhr wie der Host und der Docker kann sie nicht ändern. Dies bedeutet, dass ein ntpdate im Docker nicht funktioniert.

Das Richtige ist, die Host-Zeit mit ntpdate zu aktualisieren.

Beim Synchronisieren von Zeitzonen wird -v /etc/localtime:/etc/localtime:ro funktioniert.

55

Wenn Sie boot2docker verwenden und ntp im Docker nicht funktioniert VM ( Wenn Sie sich hinter einem Proxy befinden, der keine NTP-Pakete weiterleitet, Ihr Host jedoch zeitsynchronisiert ist, können Sie auf Ihrem Host Folgendes ausführen:

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

Auf diese Weise senden Sie die aktuelle Uhrzeit Ihres Geräts (in UTC-Zeitzone) als Zeichenfolge, um die Docker-Zeit VM Zeit mit date (erneut in UTC-Zeitzone) festzulegen.

ANMERKUNG: Verwenden Sie in Windows in einer Bash-Shell (aus dem msys git):

docker-machine.exe ssh default "Sudo date -u $(date -u +%m%d%H%M%Y)"
32
gvlx

Das hat bei mir mit einem Fedora 20-Host funktioniert. Ich habe einen Container gefahren mit:

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

Ursprünglich war /etc/localtime Eine weiche Verknüpfung zu /usr/share/zoneinfo/Asia/Kolkata, Der indischen Standardzeit. Das Ausführen von date innerhalb des Containers zeigte mir die gleiche Zeit wie auf dem Host. Ich habe die Shell verlassen und den Container mit docker stop <container-id> Gestoppt.

Als nächstes entfernte ich diese Datei und stellte zu Testzwecken einen Link zu /usr/share/zoneinfo/Singapore Her. Die Host-Zeit wurde auf die Zeitzone von Singapur eingestellt. Und dann tat docker start <container-id>. Greifen Sie dann erneut mit nsenter auf die Shell zu und stellen Sie fest, dass die Zeit jetzt auf die Zeitzone von Singapur eingestellt ist.

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

Der Schlüssel hier ist also, -v /etc/localtime:/etc/localtime:ro Zu verwenden, wenn Sie den Container zum ersten Mal ausführen. Ich fand es auf diesen Link .

Ich hoffe es hilft.

22
Dharmit

Sie können Ihre lokalen Dateien (/ etc/timezone und/etc/localtime) als Volume in Ihrem Docker-Container hinzufügen.

Aktualisiere dein docker-compose.yml mit den folgenden Zeilen.

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

Jetzt ist die Containerzeit dieselbe wie auf Ihrem Host

16
thhan

Wenn Sie eine Docker-Maschine verwenden, können die virtuellen Maschinen abdriften. So aktualisieren Sie die Uhr auf der virtuellen Maschine ohne einen Neustart auszuführen:

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

Dadurch wird die Uhr auf der virtuellen Maschine mit NTP aktualisiert, und dann haben alle gestarteten Container das richtige Datum.

10
lukecampbell

Ich war mit einem Zeitversatz von -1 Stunde und 4 Minuten konfrontiert

Durch das Neustarten von Docker selbst wurde das Problem behoben.

So legen Sie die Zeitzone im Allgemeinen fest:

  1. ssh in deinen Container: docker exec -it my_website_name bash

  2. lauf dpkg-reconfigure tzdata

  3. führe date aus
7
Stefan Diabo

Wenn Sie Docker Machine verwenden, kann es zu einer zeitlichen Abweichung kommen, wie die folgende Antwort nahe legt: https://stackoverflow.com/a/26454059/105562 , aufgrund von VirtualBox.

Eine schnelle und einfache Lösung besteht darin, Ihre VM einfach neu zu starten:

docker-machine restart default
6
Travis Reeder

Für Docker unter macOS können Sie Docker-Time-Sync-Agent verwenden. Für mich geht das.

6
cranehuang

Mit Docker für Windows musste ich kreuzen

MobyLinuxVM > Settings > Integration Services > Time synchronization 

in Hyper-V-Manager und es hat funktioniert

5
Christian Opitz

Ich habe die folgenden in der Compose-Datei

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

Dann alles gut in Gerrit Docker mit seinem replication_log mit korrektem Zeitstempel. :-D

5
j3ffyang

Dadurch wird die Uhrzeit auf dem Docker-Server zurückgesetzt:

docker run --rm --privileged Alpine hwclock -s

Wenn Sie das nächste Mal einen Container erstellen, sollte die Uhr korrekt sein.

Quelle: https://github.com/docker/for-mac/issues/2076#issuecomment-353749995

2
cahen

docker-Compose-Verwendung:

Hinzufügen /etc/localtime:/etc/localtime:ro zum volumes Attribut:

version: '3'

services:
  a-service:
      build: .
      image: service-name
      container_name: container-name
      volumes:
        - /etc/localtime:/etc/localtime:ro
2
Benyamin Jafari

Dies ist zwar keine allgemeine Lösung für jeden Host, aber jemand findet sie möglicherweise hilfreich. Wenn du weißt, wo du wohnst (UK für mich), dann schau auf tianon's Antwort hier .

FROM Alpine:3.6
RUN apk add --no-cache tzdata
ENV TZ Europe/London

Dies habe ich zu meiner Docker-Datei hinzugefügt ^ und das Zeitzonenproblem wurde behoben.

0