angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Cómo establecer la zona horaria cuando se utiliza el Python Alpine Docker image

Cuando se utiliza un Python Alpine Docker image debemos añadir el paquete tzdata antes de poder establecer la zona horaria.

13 noviembre 2019
En Docker
post main image
https://unsplash.com/@danielcgold

Mientras escribía una aplicación en mi plataforma Docker me encontré con un problema inesperado, sí, otro? Esta fue la primera vez que tuve que mostrar la hora en una página de un sitio web que se ejecutaba en Docker y parecía que la hora era UTC en lugar de la hora local. En el código sólo estaba usando las llamadas normales de Python para obtener la hora:

import  datetime

    ...
    now =  datetime.datetime.now()
    hour = now.hour
    minute = now.minute

Vivo en los Países Bajos y cuando eran las 9:30 la hora mostrada en la página web era las 8:30. La búsqueda en Internet mostró que los Docker images basados en Ubuntu no tenían este problema. Parecía que el problema era con el Alpine Docker image, estoy usando la imagen 3.6-alpina de Python . El tamaño de esta imagen es pequeño, pero eso se debe a que dejaron de lado mucho! La solución consiste en:

  1. Añadiendo el paquete tzdata al Docker image
  2. Ajuste de la zona horaria en el Docker image

Añadir el paquete tzdata es fácil. Utilizo Docker para las construcciones multietapa, por lo que en la primera etapa añadimos tzdata. En la segunda etapa copiamos el directorio zoneinfo de la primera a la segunda etapa. En el archivo Docker también establecemos la zona horaria:

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

Después de estos cambios, la hora correcta se mostraba en la página. La única desventaja es que esto añade otros pocos MBs.

Enlaces / créditos

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

Deje un comentario

Comente de forma anónima o inicie sesión para comentar.

Comentarios

Deje una respuesta.

Responda de forma anónima o inicie sesión para responder.