DevOpsDockerDocker container의 time zone

Docker Compose file

증상

  • docker container로 cronicle을 띄웠는데 브라우저에서 보니 UTC time zone으로 되어있었다.
  • Azure VM instance에 ssh 접속하여 조회해보았다.
> timedatectl
               Local time: Fri 2025-01-17 11:11:23 KST
           Universal time: Fri 2025-01-17 02:11:23 UTC
                 RTC time: Fri 2025-01-17 02:11:23
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Seoul로 되어있다고 나온다. → 즉, Ubuntu가 설치된 VM, 그러니깐 docker의 host OS는 time zone이 서울로 되어있다.
그러나 docker container 안에서는

> docker exec -it cronicle /bin/sh
> date
Fri Jan 17 02:18:08 UTC 2025

여전히 UTC로 나온다.

해결방법

docker-compose.yaml에 다음 코드 추가

    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo:/usr/share/zoneinfo:ro
    environment:
      - TZ=Asia/Seoul

container로 들어가서

> docker exec -it cronicle /bin/sh
> date
Fri Jan 17 23:05:44 KST 2025

하면 적용이 된다.

설명

- /etc/localtime:/etc/localtime:ro
host OS인 Ubuntu의 /etc/localtime이 있다. 여기에 Read Only권한으로 읽어온다.

- /usr/share/zoneinfo:/usr/share/zoneinfo:ro
host OS인 Ubuntu의 /usr/share/zoneinfo에는 세계 각 지역의 time zone이 들어있다. 만약 docker container내의 app이 다른 time zone의 library를 이용한다면 이 코드를 넣어야하지만