포스트

시놀로지 NAS- 도커 컨테이너의 타임존 설정

모두들 알듯이, 도커 이미지 빌드를 위한 명세서인 Dockerfile에서 이미지에 필요한 apt 패키지 설치를 추가 할 수 있다. 이것은 도커 이미지를 빌드하는 동안에 이미지에 apt 패키지가 설치하게 만든다.

일반적인 우분투 시스템에서 최초로 apt 패키지를 설치를 시도하면, tzdata 설정에서 타임존을 설정하기 위해 지역과 도시를 Interactive 하게 묻는다. 하지만, 이것은 도커 이미지 빌드 과정이 Interactive 한 절차를 지원하지 않기 때문에 도커 이미지 빌드 실패의 결과를 만든다.

DEBIAN_FRONTEND 환경변수

그래서 이 문제를 해결하기 위해 Dockerfile에 DEBIAN_FRONTEND 환경변수를 noninteractive로 설정함으로서 도커 이미지 빌드 중 타임존 설정을 위한 지역과 도시를 묻는 것을 생략 할 수 있다.

아래는 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

여기까지는 문제가 없다. 하지만, 현재 시간을 활용하는 소프트웨어를 개발하고 소스코드 내에서 현재 시간을 얻는 API 를 사용하면 문제가 시작된다. 타임존 설정이 없는 시스템의 시간은 UTC 기준이 된다. 그래서 당신이 사용하는 소프트웨어 개발언어의 시간관련 기능과 시스템 시간 처리가 중첩되면서 소프트웨어의 오작동을 만들 가능성이 있다.

tzdata, 그리고 타임존 설정

그래서, 매우 귀찮은 일이지만, 컨테이너를 생성하고 Attach한 이후에 아래 명령어를 통해 별도로 수동으로 타임존을 설정해야 한다. 당연히, 도커 컨테이너 밖의 리눅스 시스템에서 컨테이너의 타임존을 설정 할 수 있지만, 나는 시놀로지 나스의 도커를 사용하기 때문에 그 방법을 찾기가 애매했다.

1
dpkg-reconfigure tzdata

아래는 타임존을 설정하기 위한 나의 예시이다. 하단 부분에 아래 문구의 시간이 당신 지역의 시간이라면 올바르게 타임존이 설정된 것이다.

  • 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.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.