Problem mit Zeitzonenfehler im Docker-Container

Problem mit Zeitzonenfehler im Docker-Container

Hintergrund

Mithilfe der Bibliothek für geplante Aufgaben des Node-Schedule habe ich ein Skript geschrieben, um jeden Tag um 7 Uhr automatisch E-Mails zu versenden, wobei die E-Mail das aktuelle Datum enthält.

Frage

Die E-Mail wurde um 15 Uhr statt um 7 Uhr empfangen. Ich vermute, es lag an der Zeitzoneneinstellung.

Problemanalyse und Lösungen

Nach einer Untersuchung wurde festgestellt, dass die Node-Schedule-Bibliothek die Auswahl einer Zeitzone nicht unterstützt. Daher wird standardmäßig gemäß der globalen Standardzeit UTC gesendet. Die Zeit, die wir normalerweise eingeben, ist CST, die Shanghai-Zeitzone in China, die acht Stunden anders ist.
Die Bibliothek für geplante Aufgaben wurde geändert, um node-schedule-tz zu verwenden. Sie unterstützt die Auswahl der CST-Zeitzone und verwendet das Corntab-Zeitformat.

let j = schedule.scheduleJob('Name',"0 7 * * *",'Asien/Shanghai', Funktion () {

  console.log("Aufgabe ausführen");

  getAllDataAndSendMail();

});

Neues Problem

Nach dem Ändern der Uhrzeit trat ein neues Problem auf. Die in der E-Mail angegebene Uhrzeit war die Zeit von gestern, nicht die von heute.

Problemanalyse und Lösungen

Nach einigem Nachdenken gibt es im Code zwei Stellen, an denen die Zeit abgerufen werden kann: Eine ist die von der Bibliothek für geplante Aufgaben übergebene Zeit zum Senden der E-Mail und die andere dient zum Abrufen der aktuellen Zeit im Skript

lass heute = neues Datum()

Da ich das heutige Protokoll ausgedruckt habe, überprüfen Sie das Protokoll

docker logs -f [Container-ID] 
# heute: 2021-11-12T23:00:00.106Z

Es wurde festgestellt, dass die um 7 Uhr gesendete E-Mail heute um 23:00 Uhr des Vortages empfangen wurde, was ebenfalls einen Unterschied von 8 Stunden darstellt. Verwenden Sie den folgenden Befehl, um den Docker-Container aufzurufen und die Uhrzeit zu überprüfen

$ docker exec -it [Container-ID] sh
# Nach dem Betreten des Containers wird die Vorderseite#
# Geben Sie das Datum ein, um das Datum anzuzeigen. # Sa., 13. Nov. 05:05:31 UTC 2021

Es handelt sich tatsächlich um die globale Standardzeit UTC, was bedeutet, dass die Versandzeit der E-Mail zwar zurückgestellt wurde, die beim Ausführen des Codes erhaltene Zeit jedoch die aktuelle globale Standardzeit ist.
Wir kopieren die lokale Zeit in die Containerzeit

docker cp /etc/localtime [Container-ID]:/etc/

Überprüfen Sie die Zeit im Container erneut wie oben beschrieben und stellen Sie fest, dass sie wieder auf CST geändert wurde. Es sollte kein Problem geben.

Dies ist das Ende dieses Artikels über das Problem mit dem Zeitzonenfehler im Docker-Container. Weitere verwandte Inhalte zum Thema Zeitzonenfehler im Docker finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Docker-Zeitzonenproblem und Datenmigrationsproblem
  • Vorgang zur Zeitzonenanpassung im Docker-Container
  • So gehen Sie mit Zeitzonenproblemen in Docker um
  • 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)

<<:  Bootstrap 3.0 Studiennotizen Rastersystemprinzip

>>:  MySQL-Datenbank-Indexreihenfolge durch Sortierung – detaillierte Erklärung

Artikel empfehlen

Vue+echarts realisiert Fortschrittsbalken-Histogramm

In diesem Artikel wird der spezifische Code von v...

JavaScript verwendet setTimeout, um einen Countdown-Effekt zu erzielen

Um die Fähigkeit zum Schreiben von nativem JavaSc...

Detaillierte Erklärung der JS-Array-Methoden

Inhaltsverzeichnis 1. Das ursprüngliche Array wir...

Analyse der Vor- und Nachteile von gespeicherten MySQL-Prozeduren

MySQL Version 5.0 begann, gespeicherte Prozeduren...

Zusammenfassung des Wissens zu langsamen MySQL-Protokollen

Inhaltsverzeichnis 1. Einführung in Slow Log 2. L...

Lösung für den Fehler beim Kompilieren des LVGL-Emulators unter Linux

Inhaltsverzeichnis 1. Fehlerphänomen 2. Fehlerana...

Vue implementiert Karussell-Animation

In diesem Artikelbeispiel wird der spezifische Co...

Häufige Fehler und Gründe für MySQL-Verbindungsfehler

=================================================...

CocosCreator - modulares Lernskript

Modulares Cocos Creator-Skript Mit Cocos Creator ...

So ändern Sie den Speicherort von Datendateien in CentOS6.7 mysql5.6.33

Problem: Die Partition, in der MySQL Datendateien...