Ich habe Docker auf Linode-Servern. Manchmal sehe ich, dass die Zeit auf den Hafenarbeitern nicht richtig ist. 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
Idealerweise möchte ich jedoch, dass der Docker die Zeit mit dem Host synchronisiert. Gibt es eine Möglichkeit, dies zu tun?
docker
Befehle ausführen, kann es zu Zeitverzerrungen kommen, und Dinge wie das Mounten von Volumes funktionieren nicht wie erwartet. Dies geschieht auch, wenn Sie einen Remote-Docker-Computer einrichten, z. B. auf DigitalOcean.Antworten:
Die Quelle für diese Antwort ist der Kommentar zur Antwort unter: Wird die automatische Synchronisierungszeit des Docker-Containers mit dem Host-Computer?
Nachdem ich mir die Antwort angesehen hatte, stellte ich fest, dass auf dem Docker-Container keine Uhrendrift auftreten kann. Docker verwendet dieselbe Uhr wie der Host und der Docker kann sie nicht ändern. Dies bedeutet, dass
ntpdate
es nicht funktioniert , ein Docker zu erstellen.Das Richtige ist, die Host-Zeit mit zu aktualisieren
ntpdate
Funktioniert die Synchronisierung von Zeitzonen
-v /etc/localtime:/etc/localtime:ro
.quelle
boot2docker restart
Oder wenn Sie Ihre eigene VM betreiben, können Sientpdate
dort.Wenn Sie boot2docker verwenden und ntp in der Docker-VM nicht funktioniert (Sie befinden sich hinter einem Proxy, der keine ntp-Pakete weiterleitet), Ihr Host jedoch zeitsynchronisiert ist, können Sie Folgendes von Ihrem Host aus ausführen:
Auf diese Weise senden Sie die aktuelle Zeit Ihres Computers (in der UTC-Zeitzone) als Zeichenfolge, um die Docker-VM-Zeit mithilfe
date
(erneut in der UTC-Zeitzone) festzulegen.HINWEIS: Verwenden Sie unter Windows in einer Bash-Shell (vom msys git) Folgendes:
quelle
date
Befehl akzeptiert nur das FormatMMDDhhmm[[CC]YY][.ss]
zum Festlegen des Datums. Um Sekunden hinzuzufügen, müssen Sie diese wie folgt am Ende der Zeichenfolge einfügen :+%m%d%H%M%Y.%S
.Sie können Ihre lokalen Dateien (/ etc / timezone und / etc / localtime) als Volume in Ihren Docker-Container einfügen.
Aktualisieren Sie Ihre
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.
quelle
Dies hat bei einem Fedora 20-Host funktioniert. Ich habe einen Container ausgeführt mit:
Anfangs
/etc/localtime
war eine weiche Verbindung zur/usr/share/zoneinfo/Asia/Kolkata
indischen Standardzeit. Die Ausführungdate
im Container zeigte mir die gleiche Zeit wie auf dem Host. Ich verließ die Shell und stoppte den Container mitdocker stop <container-id>
.Als nächstes entfernte ich diese Datei und stellte zu
/usr/share/zoneinfo/Singapore
Testzwecken einen Link zu her . Die Host-Zeit wurde auf die Zeitzone von Singapur eingestellt. Und dann tat esdocker start <container-id>
. Dann wurde erneut mit auf die Shell zugegriffennsenter
und festgestellt, dass die Zeit jetzt auf die Zeitzone von Singapur eingestellt war.Der Schlüssel hier ist also,
-v /etc/localtime:/etc/localtime:ro
wenn Sie den Container zum ersten Mal ausführen. Ich habe es auf diesem Link gefunden .Ich hoffe es hilft.
quelle
Dadurch wird die Zeit auf dem Docker-Server zurückgesetzt:
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
quelle
Wenn Sie eine Docker-Maschine verwenden, können die virtuellen Maschinen driften. So aktualisieren Sie die Uhr auf der virtuellen Maschine, ohne den Lauf neu zu starten:
Dadurch wird die Uhr auf der virtuellen Maschine mithilfe von NTP aktualisiert, und dann haben alle gestarteten Container das richtige Datum.
quelle
Ich hatte einen Zeitversatz von -1 Stunde und 4 Minuten
Das Neustarten von Docker selbst hat das Problem für mich behoben.
So stellen Sie die Zeitzone im Allgemeinen ein:
ssh in deinen container:
docker exec -it my_website_name bash
Lauf
dpkg-reconfigure tzdata
date
quelle
docker-compose exec <servicename> bundle exec dpkg-reconfigure tzdata
Wenn Sie Docker Machine verwenden, kann es zu Zeitverschiebungen kommen, wie aus dieser Antwort hervorgeht: https://stackoverflow.com/a/26454059/105562 , aufgrund von VirtualBox.
Eine schnelle und einfache Lösung besteht darin, Ihre VM neu zu starten:
quelle
Ich habe Folgendes in der Erstellungsdatei
volumes: - "/etc/timezone:/etc/timezone:ro" - "/etc/localtime:/etc/localtime:ro"
Dann alles gut in Gerrit Docker mit seinem replication_log mit korrektem Zeitstempel gesetzt.
quelle
Für Docker unter MacOS können Sie Docker-Time-Sync-Agent verwenden . Für mich geht das.
quelle
Mit Docker für Windows musste ich ankreuzen
im Hyper-V-Manager und es hat funktioniert
quelle
Docker-Compose-Verwendung:
In
/etc/localtime:/etc/localtime:ro
zumvolumes
Attribute:version: '3' services: a-service: image: service-name container_name: container-name volumes: - /etc/localtime:/etc/localtime:ro
quelle
Obwohl dies nicht für jeden Host eine allgemeine Lösung ist, kann es für jemanden nützlich sein. Wenn Sie wissen, wo Sie sich befinden (UK für mich), sehen Sie sich die
tianon's
Antwort hier an .FROM alpine:3.6 RUN apk add --no-cache tzdata ENV TZ Europe/London
Dies ist, was ich zu meiner Docker-Datei ^ hinzugefügt habe und das Zeitzonenproblem wurde behoben.
quelle
Ich habe festgestellt, dass der Docker-Container nicht mehr synchron ist, wenn Ihr Computer in den Ruhezustand wechselt.
https://forums.docker.com/t/time-in-container-is-out-of-sync/16566
Ich habe hier einen Beitrag dazu verfasst. Das Zertifikat läuft in Docker immer vor 5 Tagen ab
quelle
Docker-Nutzung
Hier ist ein vollständiges Beispiel, das ein Docker-Image für eine Go-App in einem mehrstufigen Build erstellt. Es zeigt, wie Sie die Zeitzone in Ihr Bild aufnehmen können.
quelle