Linux/Docker – Establecer zona horaria

El shell de LINUX usa por defecto la zona horaria del host. Para cambiar este comportamiento usamos la variable de entorno TZ.

Para ver la configuración actual:

$ timedatectl

Podemos establecer la zona horaria con el comando en modo interactivo:

$ tzselect

Para que los cambios sean permanentes, deberemos modificar el archivo .profile usando el comando timedatctl:

El comando para cambiarlo directamente a Europe/Madrid:

$ timedatectl set-timezone Europe/Madrid

Para ver los valores posible podemos usar:

$ timedatectl list-timezones

Para establecer la hora usaremos:

$ timedatectl set-time <YYYY-MM-DD> <hh:mm:ss>

Y para mantener el reloj sincronizado:

$ timedatectl set-ntp true

Si lo que queremos es aplicar la zona horaria a un determinado contenedor docker podemos asignar la variable de entorno en:

El dockerfile:

ENV TZ=Europe/Madrid

El docker run:

$ docket run .... -e 'TZ=Europe/Madrid'

O podemos establecer la variable de entorno en el docker-compose.yml:

environment:
 - TZ=Europe/Madrid

Para heredar en un contenedor la zona y la hora del host, lo más sencillo es colocar los siguientes binds en el docker-compose.yml:

    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"

De esta manera, cualquier cambio de configuración horaria del host se aplicará al contenedor.

El ro indica que accederá al archivo de hora y zona en modo solo-lectura.