Mittlerweile ist die Containerbereitstellung sehr ausgereift. Viele unserer Dienste nutzen die Containerbereitstellung, und Aktualisierung und Wiederherstellung sind sehr bequem. Es gibt jedoch ein problematischeres Problem, nämlich die Zeitzonenverarbeitung. Normalerweise wird es durch Einfügen von TZ-Umgebungsvariablen gelöst, aber diese Verarbeitungsmethode funktioniert in Django nicht. Zeitzonenkonfiguration in DjangoIn der Konfigurationsdatei settings.py von Django gibt es zwei Konfigurationsparameter bezüglich Zeit und Zeitzone, nämlich TIME_ZONE und USE_TZ. Wir gehen davon aus, dass Django nach der Konfiguration in settings.py die Ortszeit korrekt abrufen kann, aber tatsächlich widerspricht dies unseren Erwartungen. Sehen wir uns an, was diese beiden Einstellungen bewirken. USE_TZ=TrueWenn USE_TZ auf True gesetzt ist, verwendet Django die Standardzeitzone des Systems. Zu diesem Zeitpunkt ist die Einstellung TIME_ZONE grundsätzlich ungültig, d. h. sie hat keine Auswirkung, unabhängig davon, ob sie festgelegt ist oder nicht. USE_TZ=FalschWenn USE_TZ auf False gesetzt ist
Wenn Sie Windows verwenden, ist die Einstellung TIME_ZONE nutzlos und Django verwendet die lokale Zeit. Wenn Sie andere Systeme verwenden, wird die UTC-Zeit in dieser Zeitzone verwendet. Wenn Sie beispielsweise USE_TZ = False, TIME_ZONE = „Asia/Shanghai“ festlegen, wird die UTC-Zeit von Shanghai verwendet. An diesem Punkt denken Sie vielleicht, dass die Zeit stimmt, aber das ist nicht der Fall. Wir müssen auch auf die Zeitzoneneinstellungen des Systems achten. Festlegen der Zeitzone in Linux-ContainernMeine Ortszeit ist jetzt: 16:15, und die Einstellungen in Django sind: USE_TZ = False, TIME_ZONE = 'Asia/Shanghai' Fügen Sie nicht die Umgebungsvariable TZ=Asia/Shanghai ein, um den Container aufzurufen und die Containerzeit und -zeitzone anzuzeigen. Die Systemzeit wird in der Zeitzone UTC angezeigt, die Uhrzeit ist: 08:15, genau 8 Stunden Unterschied Rufen Sie die Django-Umgebung auf, um die Uhrzeit und Zeitzone anzuzeigenPython manage.py-Shell von Datum/Uhrzeit, importiere Datum/Uhrzeit datetime.now() # Ausgabe datetime.datetime(2021, 10, 8, 8, 24, 8, 289230) von django.utils importiere Zeitzone Zeitzone.get_current_timezone_name() # Ausgabe 'Asien/Shanghai' Umgebungsvariable TZ=Asia/Shanghai einfügen Die Systemzeit wird in der asiatischen Zeitzone angezeigt, die Zeit entspricht jedoch weiterhin der UTC-Zeit und nicht der tatsächlichen Ortszeit. Rufen Sie die Django-Umgebung auf, um die Uhrzeit und Zeitzone anzuzeigen Python manage.py-Shell von Datum/Uhrzeit, importiere Datum/Uhrzeit datetime.now() # Ausgabe datetime.datetime(2021, 10, 8, 8, 24, 8, 289230) von django.utils importiere Zeitzone Zeitzone.get_current_timezone_name() # Ausgabe 'Asien/Shanghai' Wie Sie sehen, ist die Zeit, obwohl sich die Zeitzone geändert hat, immer noch UTC-Zeit, sowohl im Container selbst als auch in Django Durch eine Onlinesuche wissen wir, dass wir zum Ändern der Zeitzone des Linux-Systems die Datei /etc/localtime ändern müssen. Ändern der Zeitzone des Linux-ContainersNormalerweise wird die Datei /etc/localtime des Hosts in die Datei /etc/localtime des Containers kopiert. Wir haben jedoch durch Abfragen festgestellt, dass die Datei /etc/localtime eigentlich nur ein Softlink ist. Die eigentliche Datei lautet: /usr/share/zoneinfo/Asia/Shanghai Docker cp /usr/share/zoneinfo/Asia/Shanghai Test:/etc/localtime Wenn die Umgebungsvariable TZ=Asia/Shanghai eingefügt wird, wird, selbst wenn die Datei /etc/localtime ersetzt wird, nur die Zeitzone geändert und die Zeit ist immer noch die UTC-Zeit Rufen Sie die Django-Umgebung auf, um die Uhrzeit anzuzeigenPython manage.py-Shell von Datum/Uhrzeit, importiere Datum/Uhrzeit datetime.now() # Ausgabe datetime.datetime(2021, 10, 8, 8, 43, 43, 754698) Die Linux-Systemzeit ist normal, aber die Zeit in der Django-Umgebung ist immer noch falsch und entspricht immer noch der UTC-Zeit. Zu diesem Zeitpunkt sind viele Leute ein wenig verrückt und denken möglicherweise, dass es ein Problem mit den USE_TZ- und TIME_ZONE-Einstellungen in settings.py gibt. Tatsächlich liegt das Problem hier nicht. Der Grund dafür ist, dass die Datetime-Bibliothek nach der Datei „Asia/Shanghai“ im Verzeichnis /usr/share/zoneinfo/ sucht, unser Image dieses Verzeichnis jedoch nicht enthält, sodass Django weiterhin die Zeitzone UTC verwendet. Die Lösung ist ganz einfach: Erstellen Sie ein Verzeichnis /usr/share/zoneinfo/Asia und kopieren Sie die Dateien in dieses Verzeichnis. # Im Container (falls dieses Verzeichnis nicht existiert) mkdir -p /usr/share/zoneinfo/Asia # Außerhalb des Containers Docker cp /usr/share/zoneinfo/Asia/Shanghai test:/usr/share/zoneinfo/Asia/Shanghai Melden Sie sich dann beim Container an und rufen Sie die Django-Umgebung auf, um die Uhrzeit zu überprüfen Python manage.py-Shell von Datum/Uhrzeit, importiere Datum/Uhrzeit datetime.now() # Ausgabe datetime.datetime(2021, 10, 8, 16, 49, 32, 57) Diesmal war der Zeitpunkt genau richtig. ZusammenfassenFür das Problem der Container-Zeitzone wird empfohlen, /etc/localtime während der Containererstellungsphase zu installieren und festzulegen. Fügen Sie beispielsweise die folgende Anweisung in die Docker-Datei ein HINZUFÜGEN /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime Auf diese Weise müssen wir beim Starten unseres Containers nicht auf das Zeitzonenproblem achten. Wenn der Container erstellt wurde, mounten Sie die Zeitzonendatei beim Starten docker run -d -v /etc/localtime:/etc/localtime -v /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai Bildname Diese Methode ist problematischer. Eine andere Situation ist die, mit der wir jetzt konfrontiert sind. Der Dienst ist bereits online und wir stellen fest, dass ein Zeitproblem vorliegt. Wir kopieren die beiden Dateien manuell in den Container und starten den Container dann neu. Docker cp /usr/share/zoneinfo/Asia/Shanghai Test:/etc/localtime Docker cp /usr/share/zoneinfo/Asia/Shanghai Test:/usr/share/zoneinfo/Asia/Shanghai Docker-Neustarttest Dies ist das Ende dieses Artikels über das Zeitzonenproblem bei der Bereitstellung von Django in einem Docker-Container. Weitere Informationen zur Docker-Bereitstellung der Django-Zeitzone finden Sie in früheren Artikeln auf 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:
|
<<: Zusammenfassung der Tipps zur CSS-Verwendung
>>: CSS sorgt dafür, dass der Footer automatisch unten bleibt, wenn die Inhaltshöhe nicht ausreicht
Inhaltsverzeichnis 1. Übersicht 2. Verwenden Sie ...
Docker-Installation Installieren von Abhängigkeit...
Lernprogramm zum Erlernen von Listen-Tags für HTML...
Inhaltsverzeichnis Vorne geschrieben Lösung 1: Gl...
Tipps zum Senden von HTML-E-Mails: Verwenden Sie ...
1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...
In diesem Artikelbeispiel wird der spezifische Ja...
Inhaltsverzeichnis 1. Beobachtbar 2. Funktionen h...
Ein während des Entwicklungsprozesses häufig auft...
Inhaltsverzeichnis Überblick Beispiel Warum wird ...
Was ist Volumen? „Volume“ bedeutet auf Englisch K...
Die Methode zur Lösung des Problems, das anfängli...
1. Installieren Sie Abhängigkeitspakete [root@loc...
Durch JavaScript können wir das Springen von Hype...
Beim Produktdesign legen Designer Wert darauf, das...