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    

Artikel empfehlen

Zusammenfassung der grundlegenden Kenntnisse zur MySql-Datenbank

Inhaltsverzeichnis Grundlegende Datenbankvorgänge...

MySql-Gruppierung und zufälliges Abrufen eines Datenelements aus jeder Gruppe

Idee: Einfach erst zufällig sortieren und dann gr...

CSS -webkit-box-orient: vertikale Eigenschaft nach der Kompilierung verloren

1. Ursache Die Anforderung besteht darin, zwei Ze...

CSS-Anfänger-Tutorial: Hintergrundbild füllt den gesamten Bildschirm

Wenn Sie möchten, dass die gesamte Benutzeroberfl...

Lösung für das Problem des MySQL-Datenverzögerungssprungs

Heute haben wir ein weiteres typisches Problem im...

Vue Element-ui-Tabelle realisiert Baumstrukturtabelle

In diesem Artikel wird der spezifische Code der E...

Unabhängige Implementierung der Nginx-Containerkonfigurationsdatei

Erstellen eines Containers [root@server1 ~]# dock...

Best Practices zum Teilen von React-Code

Wenn ein Projekt eine gewisse Komplexität erreich...

Mehrere Möglichkeiten zum Sichern einer MySql-Datenbank

mysqldump-Tool-Sicherung Sichern Sie die gesamte ...

Parameter, um Iframe transparent zu machen

<iframe src="./ads_top_tian.html" all...

So deinstallieren Sie MySQL 5.7 unter CentOS7

Überprüfen Sie, was in MySQL installiert ist grep...