So gehen Sie mit Zeitzonenproblemen in Docker um

So gehen Sie mit Zeitzonenproblemen in Docker um

Hintergrund

Als ich in diesen beiden Tagen Docker verwendete, stellte ich fest, dass nach dem Start meines Containers die Ausgabezeitzone von date -R UTC war, was immer 8 Stunden hinter der Pekinger Zeit lag.


Standardbild


Die Zeitzone ist UTC

Beim Überprüfen von /etc/localtime habe ich festgestellt, dass die Standardzeitzone Etc/UTC ist. Und die Umgebungsvariable TZ ist nicht festgelegt.


So gehen Sie mit Zeitzonenproblemen in Linux um

Tatsächlich sind alle unsere Probleme mit der Zeitzonenbehandlung Probleme mit der Zeitzonenbehandlung in glibc. Die maßgeblichste Dokumentation zu diesem Problem ist die offizielle glibc-Dokumentation, die die Umgebungsvariable TZ beschreibt und die Behandlung von Zeitzonenproblemen vorstellt.

https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html#TZ-Variable

Die für uns relevanten Teile sind wie folgt.

Die Kernbedeutung ist wie folgt: In glibc ist der Wert der Umgebungsvariable TZ der Name einer Datei, deren Inhalt zeitzonenbezogene Informationen beschreibt.

Wenn die Umgebungsvariable TZ nicht festgelegt ist, wählt das System einen Standardwert. In glibc ist der Standardwert /etc/localtime. Wenn die Umgebungsvariable TZ einen Wert hat und der Wert mit / beginnt, handelt es sich um einen absoluten Pfaddateinamen, andernfalls lautet der Dateiname /usr/share/zoneinfo/$TZ. Das Verzeichnis /usr/share/zoneinfo enthält Ortszeitinformationen für verschiedene Teile der Welt, beispielsweise Asien/Shanghai. Im Allgemeinen werden die Dateien in diesem Verzeichnis vom Paket tzdata installiert.

Nach dieser Idee erzwingen wir die Umgebungsvariable TZ auf Asia/Shanghai, und die Zeitzone ist korrekt


Erzwingen Sie eine Änderung der Datei /etc/localtime, damit die Zeitzone auch korrekt ist.

So handhaben Sie Zeitzonen in Docker-Containern

Laut der obigen Beschreibung gibt es eigentlich zwei Hauptmethoden, um die Zeitzone in einem Docker-Container einzustellen. Eine besteht darin, die Umgebungsvariable TZ direkt einzustellen, und die andere besteht darin, den Inhalt von /etc/localtime direkt zu ändern (entweder über einen Softlink oder durch direktes Kopieren der Datei), ohne die Umgebungsvariable TZ einzustellen.

Hier nehmen wir das Festlegen der Umgebungsvariable TZ als Beispiel (ich mache das lieber selbst, es erscheint bequemer als das Ändern von /etc/localtime).

Zuerst können wir ENV TZ=Asia/Shanghai in die Docker-Datei einfügen, sodass die Standardumgebungsvariable TZ des von Docker erstellten Images den gewünschten Wert hat.


Zweitens können wir auch -e TZ=Asia/Shanghai verwenden, um die Umgebungsvariable TZ beim Hochladen des Containers festzulegen. Diese Einstellung ist dynamisch. Wir können beim Hochladen unterschiedliche Werte für dasselbe Bild festlegen.


Zusammenfassen

Die Zeitzonenverarbeitung in Docker ist eigentlich die Zeitzonenverarbeitung in glibc. Nachdem Sie verstanden haben, wie glibc Dinge handhabt (der Kern ist die Umgebungsvariable TZ und die Datei /etc/localtime), ist die Zeitzonenverarbeitung in Docker einfach.

Das könnte Sie auch interessieren:
  • Docker-Zeitzonenproblem und Datenmigrationsproblem
  • Vorgang zur Zeitzonenanpassung im Docker-Container
  • Der erstellte Docker-Container: Zeitanzeigefehler/Datumsfehler/Zeitzonenfehler
  • Detaillierte Erläuterung zum Ändern der Docker-Zeitzone und allgemeiner Docker-Befehle
  • So lösen Sie das Problem der Zeitzone und Zeitsynchronisierung des Docker-Containers
  • Der Unterschied zwischen zwei Möglichkeiten zum Erstellen eines Docker-Images und Starten des Containers (Zusammenfassung)
  • Problem mit Zeitzonenfehler im Docker-Container

<<:  Wie InnoDB Transaktionsisolationsebenen geschickt implementiert

>>:  Das WeChat-Applet verwendet Canvas zum Zeichnen von Uhren

Artikel empfehlen

Schritte zum Ausführen von ASP.NET Core im Docker-Container

Es gibt in letzter Zeit zu viel Wissen zu lernen,...

Detaillierte Schritte zum Erstellen eines Vue-Scaffolding-Projekts

Vue-Gerüst -> vue.cli Erstellen Sie schnell ei...

Methode zum Erstellen eines Redis-Clusters basierend auf Docker

Laden Sie das Redis-Image herunter Docker-Pull yy...

Zusammenfassung und Analyse häufig verwendeter Docker-Befehle und Beispiele

Inhalt 1. Container-Lebenszyklusmanagement (1) Do...

Vue implementiert die Drag & Drop-Sortierfunktion der Seiten-Div-Box

vue implementiert die Drag & Drop-Sortierfunk...

So stellen Sie einen Redis 6.x-Cluster über Docker bereit

Systemumgebung: Redis-Version: 6.0.8 Docker-Versi...

So fügen Sie schnell 10 Millionen Datensätze in MySQL ein

Ich habe gehört, dass es eine Interviewfrage gibt...

Analysieren Sie das Arbeitsprinzip von Tomcat

SpringBoot ist wie eine riesige Python, die sich ...

XHTML-Tutorial für den Einstieg: Häufig verwendete XHTML-Tags

<br />Genau wie ein Artikel sollten unsere W...

MySQL-Update-Fall Update-Feldwert ist keine feste Operation

Wenn bei der Verarbeitung von Batch-Updates besti...

50 wunderschöne FLASH-Website-Designbeispiele

Mit Flash konnten Designer und Entwickler umfangr...

Vue-Router-Verlaufsmodus, serverseitiger Konfigurationsprozess-Datensatz

Geschichtsroute Der Verlaufsmodus bezieht sich au...