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.