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 predeterminadoetc/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.