Hoe de tijdzone in te stellen bij gebruik van de Python Alpine Docker image
Bij gebruik van een Python Alpine Docker image moeten we het tzdatapakket toevoegen voordat we de tijdzone kunnen instellen.
Tijdens het schrijven van een applicatie op mijn Docker platform raakte ik een onverwacht probleem, ja, nog een ... Dit was de eerste keer dat ik de tijd moest laten zien op een pagina van een website die draait op Docker en het bleek dat de tijd UTC was in plaats van lokale tijd. In de code gebruikte ik gewoon de normale Python calls om de tijd te krijgen:
import datetime
...
now = datetime.datetime.now()
hour = now.hour
minute = now.minute
Ik woon in Nederland en toen het 9:30 uur was, was de tijd op de webpagina 8:30 uur. Waarom? Bij het zoeken op het internet bleek dat Docker image's op basis van Ubuntu dit probleem niet hadden. Het probleem bleek met de Alpine Docker image te zijn, ik gebruik de Python 3.6-alpine afbeelding. Het formaat van deze foto is klein, maar dat komt omdat ze veel weggelaten hebben! De oplossing bestaat uit:
- Toevoegen van het tzdatapakket aan het Docker image
- Instellen van de tijdzone in de Docker image
Het toevoegen van het tzdata pakket is eenvoudig. Ik gebruik Docker meerfasige builds, dus in de eerste fase voegen we tzdata toe. In de tweede fase kopiƫren we de zoneinfo directory van de eerste fase naar de tweede fase. In het Docker-bestand stellen we ook de tijdzone in:
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
Na deze wijzigingen werd de juiste tijd getoond in de pagina. Het enige nadeel is dat dit nog enkele MB's extra toevoegt.
Links / credits
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
Meest bekeken:
- Flask site penetration tests: security headers en de session cookie
- Flask meertalige verwerking, overschakeling en de 404 pagina Niet gevonden uitzondering
- Flask + SQLAlchemy + MariaDB profilering
- Hoe de tijdzone in te stellen bij gebruik van de Python Alpine Docker image
- Python Flask app aan Docker in ISPConfig3 met Nginx - deel 1: Minimale app
- SQLAlchemy datetime berekeningen aan de serverzijde