So stellen Sie die Zeitzone bei Verwendung der Python Alpine Docker image ein
Bei Verwendung eines Python Alpine Docker image müssen wir das tzdata-Paket hinzufügen, bevor wir die Zeitzone einstellen können.
Beim Schreiben einer Anwendung auf meiner Docker -Plattform bin ich auf ein unerwartetes Problem gestoßen, ja, ein weiteres.... Dies war das erste Mal, dass ich die Zeit auf einer Seite einer Website mit Docker anzeigen musste, und es schien, dass die Zeit UTC statt Lokalzeit war. Im Code habe ich nur die normalen Python -Aufrufe verwendet, um die Zeit zu erhalten:
import datetime
...
now = datetime.datetime.now()
hour = now.hour
minute = now.minute
Ich lebe in den Niederlanden und als es 9:30 Uhr war, war die auf der Webseite angezeigte Zeit 8:30 Uhr. Die Suche im Internet ergab, dass Docker images auf Ubuntu-Basis dieses Problem nicht hatten. Es schien, dass das Problem mit dem Alpine Docker image war, ich verwende das Python 3.6-alpine Bild. Die Größe dieses Bildes ist klein, aber das liegt daran, dass sie viel ausgelassen haben! Die Lösung besteht aus:
- Hinzufügen des tzdata-Pakets zum Docker image
- Einstellen der Zeitzone in der Docker image
Das Hinzufügen des tzdata-Pakets ist einfach. Ich verwende Docker mehrstufige Builds, so dass wir in der ersten Phase tzdata hinzufügen. In der zweiten Stufe kopieren wir das Zoneinfo-Verzeichnis von der ersten Stufe auf die zweite Stufe. In der Dockerfile setzen wir auch die Zeitzone:
FROM python:3.6-alpine as base
...
RUN apk add --update \
....
tzdata \
...
FROM python:3.6-alpine
...
COPY --from=base /usr/share/zoneinfo /usr/share/zoneinfo
ENV TZ=Europe/Amsterdam
Nach diesen Änderungen wurde die richtige Zeit auf der Seite angezeigt. Der einzige Nachteil ist, dass dadurch weitere wenige MBs hinzukommen.
Links / Impressum
Setting the timezone
https://wiki.alpinelinux.org/wiki/Setting_the_timezone
Using local time in a Golang Docker container built from Scratch
https://medium.com/@mhcbinder/using-local-time-in-a-golang-docker-container-built-from-scratch-2900af02fbaf
Neueste
- Ausblenden der Primärschlüssel der Datenbank UUID Ihrer Webanwendung
- Don't Repeat Yourself (DRY) mit Jinja2
- SQLAlchemy, PostgreSQL, maximale Anzahl von Zeilen pro user
- Anzeige der Werte in den dynamischen Filtern SQLAlchemy
- Sichere Datenübertragung mit Public Key Verschlüsselung und pyNaCl
- rqlite: eine hochverfügbare und distverteilte SQLite -Alternative
Meistgesehen
- Verwendung von Pythons pyOpenSSL zur Überprüfung von SSL-Zertifikaten, die von einem Host heruntergeladen wurden
- Verwendung von UUIDs anstelle von Integer Autoincrement Primary Keys mit SQLAlchemy und MariaDb
- Verbindung zu einem Dienst auf einem Docker -Host von einem Docker -Container aus
- PyInstaller und Cython verwenden, um eine ausführbare Python-Datei zu erstellen
- SQLAlchemy: Verwendung von Cascade Deletes zum Löschen verwandter Objekte
- Flask RESTful API Validierung von Anfrageparametern mit Marshmallow-Schemas