time.LoadLocation Go en Alpine Docker

Sebastian Catalan Araya
2 min readJun 14, 2021

--

Me encontre con un problema que estuvo todo el fin de semana dando vueltas en mi cabeza. Hasta que despues de leer mucho y hacer un par de pruebas pude dar con una solucion.

Cuando usamos time.LoadLocation en Go para cargar un timezone en especifico, localmente funciona perfecto (o al menos en mi caso que ocupo OSX)

Ej: https://play.golang.org/p/C8ntXPyQ9lY

El problema comienza cuando generamos nuestro contenedor en base a una imagen de Alpine, esta distribucion no trae los timezone que necesitamos.

Despues de mucho leer, llegue a 3 posibles soluciones:

  • Cargar un archivo zoneinfo.zip en nuestro contenedor.
  • Usar un hardcode para el timezone.
  • Agregar un paquete nuevo a nuestro contenedor para consultar los timezone.

De estas 3 opciones, escogi la ultima. Ya que la primera implicaba que en algun momento podia quedar desactualizado y la segunda no era muy elegante ni limpia para mi gusto.

Entonces lo primero fue agregar en nuestro Dockerfile antes de hacer un build la siguiente linea:

RUN apk add — no-cache tzdata

Y como segundo paso, en nuestro servicio o lugar donde ocuparemos el loadLocation importar el siguiente paquete que se encargara de cargar los timezone:

import _ “time/tzdata”

Ref: https://golang.org/pkg/time/tzdata/

PD: pido disculpas por las tildes, pero mi teclado esta en ANSI y aun no he visto ese tema :)

--

--