Woher beziehen Docker-Container ihre Zeitinformationen? Ich habe einige Container aus dem grundlegenden ubuntu: trusty-Image erstellt. Wenn ich es ausführe und das Datum abfrage, erhalte ich die UTC-Zeit.
Eine Weile lang habe ich das in meinem Dockerfile so umgangen:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Aus irgendeinem Grund funktionierte das jedoch nicht mehr. Bei der Online-Suche habe ich die folgenden Vorschläge gesehen:
docker run -v /etc/timezone:/etc/timezone [image-name]
Beide Methoden stellen die Zeitzone korrekt ein!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
Weiß jemand was das gibt?
Alpine
, müssen Sietzdata
zuerst installieren , siehe hier github.com/gliderlabs/docker-alpine/issues/136-v /etc/localtime:/etc/localtime:ro
Arbeiten mit (CentOS). Das Befehlszeilendatum im Container gibt das Datum im erwarteten Zeitzonenformat zurück. ABER Jenkins, die im Container laufen, denken, dass die Zeitzone UTC ist. Warum? / etc / localtime ist ein Symlink zu ../usr/share/zoneinfo/UTC in einem erstellten Container. Der Inhalt der UTC-Datei im Container ist jetzt die neue Zeitzone. Aber Jenkins (und vielleicht auch andere Java-basierte Software) verwenden den Namen des Symlinks, der immer noch "UTC" ist. Auf der Suche nach einer Lösung. . .Antworten:
Das Geheimnis hierbei ist, dass man
dpkg-reconfigure tzdata
einfach/etc/localtime
als Kopie, Hardlink oder Symlink (ein Symlink wird bevorzugt) eine Datei in erstellt/usr/share/zoneinfo
. Es ist also möglich, dies vollständig von Ihrem Dockerfile aus zu tun. Erwägen:Und als Bonus wird TZ auch im Container korrekt eingestellt.
Dies ist auch verteilungsunabhängig, so dass es mit so ziemlich jedem Linux funktioniert.
Hinweis: Wenn Sie ein alpines Image verwenden, müssen Sie das
tzdata
erste installieren . (siehe diese Ausgabe hier )Sieht aus wie das:
quelle
tzdata
Paket installiert sein, damit dies funktioniert.TZ
ausreicht , nur die Variable zu setzen. Ich musste weder die Symlinks noch irgendetwas anderes einrichten.In der Regel ist es ausreichend, eine Umgebungsvariable im Docker-Container wie folgt festzulegen:
Das würde natürlich auch mit funktionieren
docker-compose
.quelle
ubuntu:16.04
nicht über dastzdata
Paket verfügen, das in Dockerfile hinzugefügt werden soll.Das Einhängen
/etc/localtime
in das Bild, damit es synchronhost -v
ist, ist das beliebteste.Aber siehe Ausgabe 12084 :
quelle
RUN echo "Europe/London" > /etc/timezone
Sie können Ihre lokalen Dateien (/ etc / timezone und / etc / localtime) als Volume in Ihrem Docker-Container hinzufügen.
Aktualisieren Sie Ihre
docker-compose.yml
mit den folgenden Zeilen.Jetzt ist die Containerzeit dieselbe wie auf Ihrem Host
quelle
echo "Europe/Paris" > /etc/timezone
bevor Sie den Container neu starten.In Ubuntu 16.04 Bild gibt es Fehler. Lösung war
quelle
Wenn Sie ein Docker-Image verwenden, basierend auf
ubuntu
:quelle
Vielen Dank an VonC für die Informationen und den Link zum Thema. Dies scheint ein so verworrenes Durcheinander zu sein, dass ich meine eigene Idee getestet habe, wie man das löst, und es scheint großartig zu funktionieren.
(Folgen Sie den Anweisungen, um meine Zeitzone auszuwählen.)
Dann habe ich meine Dockerdateien aktualisiert, um dies widerzuspiegeln:
Daran muss etwas falsch sein, denn es scheint zu leicht zu sein, übersehen zu werden ... Oder ist das akzeptabel?
quelle
exit
den Container geöffnet habe . Dies ist auf Debian.Fügen Sie hier meine zwei Cent hinzu, weil ich mehrere davon ausprobiert habe, aber keiner mit Bildern auf Alpinbasis gearbeitet hat.
Dies hat jedoch den Trick getan:
[ Quelle ]
quelle
Eine allgemeinere Methode zum Festlegen der Zeitzone in
docker run
Argumenten:Oder zur Wiederverwendung:
quelle