¿Por qué una aplicación en contenedor vuelve a usar UTC solo después de actualizar una imagen?

Eva Wong es la Redactora técnica y manitas residente en ZimaSpace. Una geek de toda la vida con pasión por los homelabs y el software de código abierto, se especializa en traducir conceptos técnicos complejos en guías accesibles y prácticas. Eva cree que el autoalojamiento debe ser divertido, no intimidante. A través de sus tutoriales, empodera a la comunidad para desmitificar las configuraciones de hardware, desde construir su primer NAS hasta dominar los contenedores Docker.

Una aplicación en contenedor puede volver a UTC después de una actualización cuando la nueva imagen elimina los datos de zona horaria, ignora TZ o deja de usar el montaje de zona horaria del host.

El reloj del host puede seguir siendo correcto mientras la aplicación muestra las fechas en UTC, porque los contenedores normalmente comparten el reloj del kernel del host, pero tienen sus propios archivos de zona horaria, variables de entorno y datos del entorno de ejecución del lenguaje. Una actualización de la imagen puede cambiar la distribución base, eliminar tzdata, cambia el usuario de la aplicación, reemplaza el punto de entrada o deja de respetar una configuración específica del proveedor TZ variable. Compara la imagen antigua y la nueva antes de cambiar la zona horaria del host.

Separa la hora del reloj del sistema del formato de zona horaria

Registra la hora UTC, la hora local con formato, el nombre de la zona horaria, el desfase numérico y la hora que muestra la propia aplicación dentro de los contenedores antiguo y nuevo.

La biblioteca GNU C explica que la variable TZ controla la conversión a la hora local, mientras que el reloj del sistema subyacente sigue siendo una fuente de tiempo absoluta.

Si la hora de época coincide, pero cambia la zona con formato, el problema está en la configuración de zona horaria, no en una desviación del reloj ni en NTP.

Comprueba si la nueva imagen todavía contiene tzdata

Compara los paquetes instalados, /usr/share/zoneinfo, /etc/localtime, y /etc/timezone entre las etiquetas de imagen anterior y actual.

El paquete tzdata de Debian proporciona definiciones de zonas horarias que las aplicaciones utilizan para convertir UTC a la hora local regional.

Una imagen de reemplazo mínima puede omitir intencionadamente este paquete. Instálalo en una imagen derivada o usa el mecanismo de zona horaria compatible con la aplicación en lugar de modificar manualmente un contenedor en ejecución.

Verifica cómo aplica TZ la distribución base

Identifica si la imagen está basada en Debian, Ubuntu, Alpine, distroless u otra base. No asumas que esa configuración TZ tiene efectos idénticos en todas las imágenes.

Alpine Linux documenta la configuración de zona horaria mediante tzdata y zoneinfo.

Si la actualización cambió la imagen base, repita la configuración de zona horaria usando el método compatible con esa distribución. Copiar un solo archivo del contenedor antiguo puede dejar obsoletas las reglas del horario de verano.

-15% OFF

Inspeccione el montaje bind de localtime del host

Compare los montajes del contenedor en ejecución antes y después de recrearlo. Compruebe si /etc/localtime o un archivo zoneinfo sigue montado como de solo lectura.

Los montajes bind de Docker asignan un archivo o directorio exacto del host al contenedor. La documentación oficial sobre montajes bind explica por qué un montaje de Compose eliminado o una ruta de origen modificada hace que el contenedor nuevo vuelva al valor predeterminado de su imagen.

No monte todo el /etc directorio. Utilice el archivo compatible específico o la configuración explícita de zona horaria que requiera la aplicación.

Compruebe la base de datos de zonas horarias propia del entorno de ejecución de la aplicación

Determine si la aplicación utiliza la base de datos zoneinfo del sistema operativo o incluye los datos de zona horaria dentro de Python, Java, PHP, Node.js u otro entorno de ejecución.

El módulo zoneinfo de Python busca datos del sistema o un paquete tzdata.

Por lo tanto, una aplicación puede mostrar UTC aunque los comandos del shell indiquen la zona correcta. Compare por separado el comportamiento en tiempo de ejecución de la aplicación con el del shell del contenedor.

Verificar la precedencia del entorno de Compose después de la recreación

Inspeccione el entorno final del contenedor recreado y compárelo con la interpolación de Compose. entorno, env_filey los valores predeterminados de las imágenes.

La documentación de contenedores de Red Hat señala que la configuración del entorno de ejecución puede anular el entorno de la imagen, por lo que una imagen actualizada y un archivo de implementación antiguo pueden producir un valor final distinto del esperado.

Lee el entorno real del contenedor en lugar de consultar únicamente el archivo Compose. Una interfaz de pila obsoleta o un archivo de entorno alternativo puede haber vuelto a crear el servicio sin la variable de zona horaria prevista.

Fija la configuración y prueba después de otra actualización

Elige un método de zona horaria compatible, fíjalo en la configuración de implementación con control de versiones, vuelve a crear el contenedor y verifica las fechas de invierno y de horario de verano cuando corresponda.

El artículo de ZimaSpace sobre la hora de las tareas del contenedor y el entorno proporciona el límite de diagnóstico relacionado para las programaciones que cambian cuando se modifican los ajustes de hora del contenedor.

El problema se resuelve cuando la aplicación, el shell, los registros y las tareas programadas utilizan la zona prevista después de reiniciar y volver a crear la imagen de forma controlada.

Preguntas frecuentes

¿Los contenedores tienen su propio reloj de hardware?

No. Normalmente comparten el reloj del kernel del host, pero pueden formatear esa hora utilizando distintos datos de zona horaria y configuraciones del entorno.

¿Configurar TZ siempre es suficiente?

No. La imagen y la aplicación deben admitir la variable y tener acceso a las reglas de zona horaria. Algunos entornos de ejecución utilizan una base de datos incluida independiente.

¿Debería cambiar la zona horaria del host del NAS para solucionar el problema de un contenedor?

No. Primero corrige la configuración del contenedor o de la aplicación; cambiar el host puede afectar los registros, las programaciones y todos los demás servicios.

Soporte y Consejos

Más para leer

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.