Saltar al contenido

Hora y zona horaria del contenedor Docker (no reflejará cambios)

Este equipo de trabajo ha estado por horas investigando para dar espuestas a tu duda, te brindamos la respuesta de modo que deseamos resultarte de gran ayuda.

Solución:

Solución 1:

El secreto aquí es que dpkg-reconfigure tzdata simplemente crea /etc/localtime como una copia, enlace fijo o enlace simbólico (se prefiere un enlace simbólico) a un archivo en /usr/share/zoneinfo. Entonces, es posible hacer esto completamente desde su Dockerfile. Considerar:

ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Y como beneficio adicional, TZ también se configurará correctamente en el contenedor.

Esto también es independiente de la distribución, por lo que funciona con prácticamente cualquier Linux.

Nota: si está utilizando una imagen basada en alpine, debe instalar el tzdata primero. (ver este problema aquí)

Se ve como esto:

RUN apk add --no-cache tzdata
ENV TZ America/Los_Angeles

Solución 2:

Por lo general, es suficiente establecer una variable de entorno en el contenedor de la ventana acoplable, así:

docker run -e TZ=Europe/Amsterdam debian:jessie date

Por supuesto, esto también funcionaría con docker-compose.


Solución 3:

Puede agregar sus archivos locales (/etc/timezone y /etc/localtime) como volumen en su docker-container.

Actualiza tu docker-compose.yml con las siguientes lineas.

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

Ahora el tiempo del contenedor es el mismo que en su host


Solución 4:

Montaje /etc/localtime en la imagen, por lo que está sincronizado con host -v es el más popular.

Pero vea el problema 12084:

no es correcto porque no funciona cuando el software requiere en su lugar el archivo /etc/timezone para ajustar.
De esa manera que está usando, déjelo como el valor predeterminado etc/UTC.

He determinado que en realidad no existe una forma elegante e infalible de configurar la zona horaria dentro de un contenedor acoplable.
Así que finalmente me he decidido por esta solución:

Archivo acoplable de la aplicación:

# Relocate the timezone file
RUN mkdir -p /config/etc && mv /etc/timezone /config/etc/ && ln -s /config/etc/timezone /etc/

Script de punto de entrada de la aplicación:

# Set timezone as specified in /config/etc/timezone
dpkg-reconfigure -f noninteractive tzdata

Volumen de datos /config dockerfile, localizado en un país o región específicos:

# Set the time zone
RUN echo "Europe/London" > /config/etc/timezone

… no es elegante porque involucra 3 archivos separados y recrea /etc/localtime en cada inicio de contenedor de tiempo de ejecución. Lo cual es bastante derrochador.

Sin embargo, funciona correctamente y logra con éxito la separación entre la imagen de la aplicación base y cada configuración localizada por país.
En 3 líneas de código.


Solución 5:

En la imagen de ubuntu 16.04 hay un error. La solución fue

    ENV TZ 'Europe/Tallinn'
    RUN echo $TZ > /etc/timezone && 
    apt-get update && apt-get install -y tzdata && 
    rm /etc/localtime && 
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && 
    dpkg-reconfigure -f noninteractive tzdata && 
    apt-get clean

Te invitamos a favorecer nuestro quehacer mostrando un comentario o valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *