¿De dónde obtienen los contenedores Docker su información de tiempo? He creado algunos contenedores de ubuntu básico: trusty image, y cuando lo corro y solicito 'fecha', obtengo la hora UTC.
Durante un tiempo, evité esto haciendo lo siguiente en mi Dockerfile:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Sin embargo, por alguna razón que dejó de funcionar. Buscando en línea Vi lo que se sugiere a continuación:
docker run -v /etc/timezone:/etc/timezone [image-name]
¡Ambos métodos establecen correctamente la zona horaria!
$ cat /etc/timezoneAmerica/Los_Angeles$ dateTue Apr 14 23:46:51 UTC 2015
El secreto aquí es que dpkg-reconfigure tzdata simplemente crea /etc/localtime como copia, enlace rígido o enlace simbólico (se prefiere un enlace simbólico) a un archivo en /usr/share/zoneinfo. Por lo tanto, es posible hacer esto completamente desde su archivo acoplable. Considerar:
no es correcto porque no funciona cuando el software requiere en su lugar el archivo /etc/timezone por fijar. De esta forma, lo deja como valor predeterminado etc/UTC.
He determinado que en realidad no hay una forma elegante e infalible de establecer la zona horaria dentro de un contenedor acoplable. Así que finalmente se han asentado en esta solución:
# Set timezone as specified in /config/etc/timezonedpkg-reconfigure -f noninteractive tzdata
Volumen de datos /config dockerfile, localizado en un país o región específicos:
# Set the time zoneRUN echo "Europe/London" > /config/etc/timezone
... no es elegante porque involucra 3 archivos separados y re-crea /etc/localtime en cada inicio de contenedor en tiempo de ejecución. Lo cual es un desperdicio.
Sin embargo, funciona correctamente y logra 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.
Gracias a VonC por la información y enlace al tema. Esto parece un lío tan complicado, así que hice algunas pruebas en mi propia idea de cómo resolver esto y parece funcionar muy bien.
>docker run -it ubuntu:trusty /bin/bash#dpkg-reconfigure tzdata
(siga las indicaciones para seleccionar mi zona horaria)
>docker commit [container-id] chocko/ubuntu:local
Luego actualizé mis archivos Docker para reflejar esto:
FROM chocko/ubuntu:local
Tiene que haber algo malo en esto porque parece demasiado fácil ser pasado por alto... O es esto aceptable?