Entrada

Synology NAS- configuración de zona horaria del contenedor Docker

Como todo el mundo sabe, en Dockerfile, que es la especificación para crear una imagen de Docker, puede agregar la instalación del paquete apt necesaria para la imagen. Esto hace que el paquete apt se instale en la imagen de Docker mientras se construye.

Cuando intenta instalar el paquete apt por primera vez en un sistema Ubuntu típico, se le solicita interactivamente la región y la ciudad para configurar la zona horaria en la configuración de tzdata. Sin embargo, esto provoca un error en la creación de imágenes de Docker porque el proceso de creación de imágenes de Docker no admite procedimientos interactivos.

Variable de entorno DEBIAN_FRONTEND

Entonces, para resolver este problema, puede omitir solicitar la región y la ciudad para configurar la zona horaria mientras crea la imagen de Docker configurando la variable de entorno DEBIAN_FRONTEND en noninteractive en el Dockerfile.

A continuación se muestra un ejemplo sencillo de un Dockerfile.

1
2
3
4
5
6
7
8
FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y vim git wget rsyslog sudo

# add and so on ..

CMD bash

No hay problemas hasta este momento. Sin embargo, el problema comienza cuando desarrolla software que utiliza la hora actual y utiliza una API para obtener la hora actual dentro del código fuente. La hora de un sistema sin configuración de zona horaria se basa en UTC. Por lo tanto, existe la posibilidad de que las funciones relacionadas con el tiempo del lenguaje de desarrollo de software que utiliza y el procesamiento de tiempo del sistema se superpongan, provocando un mal funcionamiento del software.

Configuración de tzdata y zona horaria

Entonces, aunque es muy molesto, después de crear y adjuntar un contenedor, debes configurar manualmente la zona horaria por separado usando el siguiente comando. Por supuesto, puede configurar la zona horaria del contenedor en un sistema Linux fuera de un contenedor Docker, pero como uso Docker de Synology NAS, fue difícil encontrar una manera de hacerlo.

1
dpkg-reconfigure tzdata

A continuación se muestra mi ejemplo para configurar la zona horaria. Si la hora en el texto a continuación es su hora local, la zona horaria está configurada correctamente.

  • Local time is now
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
root@img:~# dpkg-reconfigure tzdata
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
Configuring tzdata
------------------
  
Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the
time zones in which they are located.
  
1. Africa   3. Antarctica  5. Arctic Ocean  7. Atlantic Ocean  9. Indian Ocean    11. System V timezones  13. None of the above
2. America  4. Australia   6. Asia          8. Europe          10. Pacific Ocean  12. US
Geographic area: 6
  
Please select the city or region corresponding to your time zone.
  
1. Aden      11. Baku        21. Damascus          31. Hong Kong  41. Kashgar       51. Makassar      61. Pyongyang
2. Singapore      81. Ujung Pandang
...
9. Baghdad   19. Chongqing   29. Hebron            39. Kamchatka  49. Macau         59. Phnom Penh    69. Seoul
10. Tokyo          89. Yekaterinburg
...
Time zone: 69
  
Current default time zone: 'Asia/Seoul'
Local time is now:      Thu Feb  1 23:46:23 KST 2024.
Universal Time is now:  Thu Feb  1 14:46:23 UTC 2024.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.