¿De dónde obtienen los contenedores Docker su información de tiempo? He creado algunos contenedores a partir del ubuntu básico: imagen de confianza, y cuando lo ejecuto y solicito 'fecha', obtengo la hora UTC.
Por un tiempo, resolví esto haciendo lo siguiente en mi Dockerfile:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Sin embargo, por alguna razón eso dejó de funcionar. Al buscar en línea, vi lo siguiente sugerido:
docker run -v /etc/timezone:/etc/timezone [image-name]
¡Sin embargo, ambos métodos establecen correctamente la zona horaria!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
Alguien sabe lo que da?
Alpine
,tzdata
primero necesita instalar , vea aquí github.com/gliderlabs/docker-alpine/issues/136-v /etc/localtime:/etc/localtime:ro
(CentOS) tipo de trabajos. La fecha de la línea de comandos del contenedor interno devuelve la fecha en el formato de zona horaria esperado. PERO jenkins corriendo en un contenedor piensa que la zona horaria es UTC. ¿Por qué? / etc / localtime es un enlace simbólico a ../usr/share/zoneinfo/UTC en el contenedor integrado. El contenido del archivo UTC en el contenedor ahora es la nueva zona horaria. Pero jenkins (y quizás otro software basado en Java) usa el nombre del enlace simbólico que todavía es "UTC". Buscando una solución. . .Respuestas:
El secreto aquí es que
dpkg-reconfigure tzdata
simplemente crea/etc/localtime
como una copia, un enlace duro o un enlace simbólico (se prefiere un enlace simbólico) a un archivo/usr/share/zoneinfo
. Por lo tanto, es posible hacer esto completamente desde su Dockerfile. Considerar: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 casi cualquier Linux.
Nota: si está utilizando una imagen alpina, debe instalar la
tzdata
primera. (ver este tema aquí )Se ve como esto:
fuente
tzdata
instalado el paquete para que esto funcione.TZ
variable. No tuve que configurar los enlaces simbólicos ni nada más.Por lo general, es suficiente establecer una variable de entorno en el contenedor acoplable, de esta manera:
Por supuesto, esto funcionaría también con
docker-compose
.fuente
ubuntu:16.04
, no tenga eltzdata
paquete que debe agregarse en Dockerfile.El montaje
/etc/localtime
en la imagen, por lo que está sincronizado,host -v
es el más popular.Pero vea el problema 12084 :
fuente
RUN echo "Europe/London" > /etc/timezone
Puede agregar sus archivos locales (/ etc / timezone y / etc / localtime) como volumen en su contenedor acoplable.
Actualiza tu
docker-compose.yml
con las siguientes líneas.Ahora el tiempo del contenedor es el mismo que en su host
fuente
echo "Europe/Paris" > /etc/timezone
antes de reiniciar el contenedor.En ubuntu 16.04 imagen hay error. La solución fue
fuente
Si está utilizando la imagen acoplable basada en
ubuntu
:fuente
Gracias a VonC por la información y el enlace al problema. Esto parece un desastre tan complicado, así que hice algunas pruebas sobre mi propia idea de cómo resolver esto y parece funcionar muy bien.
(siga las indicaciones para seleccionar mi zona horaria)
Luego actualicé mis Dockerfiles para reflejar esto:
Debe haber algo mal con esto porque parece demasiado fácil pasarlo por alto ... ¿O es esto aceptable?
fuente
exit
del contenedor. Esto está en Debian.Agregué mis dos centavos aquí, porque he probado varios de estos pero ninguno funcionó en imágenes alpinas.
Sin embargo, esto hizo el truco:
[ Fuente ]
fuente
Una forma más genérica de establecer la zona horaria en
docker run
argumentos:O para reutilizar:
fuente