it-swarm.com.de

Wird der Docker-Container automatisch mit der Host-Maschine synchronisiert?

Dazu habe ich die Zeitzone des Docker-Containers bereits richtig geändert. Muss ich einen NTP -Server im Docker-Container installieren, um die Uhrzeit regelmäßig zu synchronisieren, oder der Container wird die Uhrzeit von seinem Host-Computer aus synchronisieren?

93
vantt

Wenn Sie unter OSX boot2docker ausführen, lesen Sie dieses Problem: https://github.com/boot2docker/boot2docker/issues/290

Die Zeitsynchronisierung wird zu einem Problem, da der Boot2docker-Host während des Schlafens des Betriebssystems zeitlich verschoben ist. Die Zeitsynchronisierung mit Ihrem Docker-Container kann nicht durch Ausführen des Containers mit -v /etc/localtime:/etc/localtime:ro gelöst werden.

Stattdessen müssen Sie dies vorübergehend unter OSX ausführen: 

/usr/local/bin/boot2docker ssh Sudo ntpclient -s -h pool.ntp.org

Update für Benutzer von Kitematic

Wenn Sie Kitematic ausführen, ist dies der empfohlene Mechanismus, um Docker in OSX aufzurufen und auszuführen. In diesem Fall müssen Sie diesen Befehl regelmäßig ausführen:

docker-machine ssh default 'Sudo ntpclient -s -h pool.ntp.org'

Oder für ältere Docker-Versionen

docker-machine ssh dev 'Sudo ntpclient -s -h pool.ntp.org'

Update für Benutzer des neuen nativen Docker für OSX

Die neue Docker Beta verzichtet auf VirtualBox und Docker Machine. Die neuesten Builds von Docker (derzeit 1.12.1-beta25 (build: 11807)) scheinen die Fähigkeit zu haben, zu erkennen, wann eine Zeitunterbrechung aufgetreten ist, und sie entsprechend anzupassen. Daher sollte dies kein Thema mehr sein ... hooray !!

100
esilver

https://github.com/sameersbn/docker-gitlab/issues/77

Siehe die Antwort von sameersbn.

option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"
45
user3908675

Die einfachste Lösung scheint zu sein, Ihren Container mit der Option -v /etc/localtime:/etc/localtime:ro auszuführen. Somit:

#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

Bei Docker für Mac OS X Beta habe ich einen erheblichen Drift auf der VM gesehen, die auf Alpine Linux basiert. Unter Alpine Linux FAQ können Sie die Uhr der VM mit dem folgenden Befehl synchronisieren.

ntpd -d -q -n -p pool.ntp.org

Der Zugriff auf ein Terminal über VM ist jedoch eine andere Frage, die Sie mit dem Befehl screen ausführen können. 

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.AMD64-linux/tty

Dieser Pfad ist ein Symlink, der auf meinem System auf /dev/ttys003 verweist.

Wenn Sie einsteigen, beachten Sie, dass der moby login einfach root ohne Passwort ist. Nachdem Sie fertig sind, wird CTRL-A, D von der Bildschirmsitzung getrennt.

HINWEIS: Dies wurde früher auf Docker für Mac-Fehlerbehebung dokumentiert , aber es scheint heruntergekommen zu sein. Ich hatte das Glück, es auf der Dockercon 2016 gezeigt zu haben. Es scheint, als würde Docker versuchen, die VM vollständig aus der Erfahrung zu extrahieren, was erklärt, warum es nicht mehr dokumentiert ist.

23

Die aktuelle Lösung für die OSX-Zeitverschiebung auf Docker (April 2018):

Ich habe meinen Mac auf einem NTP -Server, aber diese feste Uhr driftet mit Containern:

Von https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :

Wenn Ihr System keinen Zugriff auf einen NTP -Server hat, ist die Zeit, die Docker für Mac feststellt, nach einem Ruhezustand möglicherweise nicht mit dem Host synchron. Darüber hinaus kann die Zeit während des Betriebs langsam aus dem Takt geraten. Um die Zeit nach dem Ruhezustand manuell zurückzusetzen, führen Sie Folgendes aus:

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

Um beide Probleme zu beheben, können Sie die lokale Uhr als Zeitquelle für den Host mit niedriger Priorität (hoher Schicht) NTP hinzufügen. Bearbeiten Sie dazu die Datei /etc/ntp-restrict.conf des Hosts, um Folgendes hinzuzufügen:

server 127.127.1.1              # LCL, local clock
fudge  127.127.1.1 stratum 12   # increase stratum

Starten Sie dann den NTP - Dienst erneut mit:

Sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
1
Steve Kallestad

docker-Compose-Nutzung:

Fügen Sie /etc/localtime:/etc/localtime:ro zum volumes-Attribut hinzu.

Sehen Sie sich dieses link an, um ein Beispiel zu zeigen.

0
Benyamin Jafari