Dev

Docker timezone 설정하기

hou27 2022. 10. 19. 13:50

프로젝트를 진행하면서 aws ec2에 띄워둔
docker container에서 로그를 요일별로 정리하여 파일로 저장하고 있었다.

근데 로그에 표시할 시간은 적절한 조치를 통해 한국 시간으로 표시하고 있었지만,
docker container 자체의 timezone이 UTC+0으로 설정되어 있었기 때문에

한국 시간을 기준으로 00시부터 새로운 로그파일이 생성되지 않는 문제가 있었다.

그래서 docker container의 timezone 자체를 Asia/Seoul로 설정하고자 한다.



Dockerfile의 설정을 통해서도 timezone을 지정해줄 수 있지만

현재 필자의 프로젝트는
EC2에 docker-compose를 통해
API 서버 & PostgreSQL 서버 & Redis 서버

로 배포되고 있었기 때문에

 

docker-compose 파일에서 설정하는 법


docker-compose.yml 파일에서 환경설정을 진행하도록 할 것이다.

변경 전 docker container의 timezone 확인

TIMEZONE 변경 전 api 서버에서 Date() 함수를 실행해본 모습이다.
사진에서 확인할 수 있듯이 UTC+0으로 timezone이 설정되어있는 모습이다.


UTC ? GMT ?

위 사진을 보고 왜 GMT+0인데 왜 UTC+0이라고 하는거지?
하는 의문을 가질 수 있다.

GMT와 UTC는 실제로 동일한 현재 시간을 공유하지만 둘 사이에는 기본적인 차이점이 있다.

  • GMT는 일부 유럽 및 아프리카 국가에서 공식적으로 사용되는 표준 시간대이다.
  • UTC표준 시간대가 아니라 전 세계 표준시 및 표준 시간대의 기초가 되는 시간 표준이다. 즉, 공식적으로 UTC를 현지 시간으로 사용하는 국가나 지역이 없다.

The Difference Between GMT and UTC


docker-compose.yml에 환경설정하기

TZ=[timezone]
와 같이 환경설정을 해줌으로써 docker container의 시간대를 원하는 곳으로 지정할 수 있다.

TIMEZONE 변경 후

TZ 환경설정을 추가한 docker-compose.yml 파일로 다시 컨테이너를 올리니
위와 같이 KST로 timezone이 잘 설정된 것을 확인할 수 있었다.

 

dockerfile에서 설정하는 법

만약 여러분이 docker file을 사용하여 timezone을 설정하고 싶다면,

구글링하면 상단에 바로 뜨는 방법처럼

ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

이렇게 /usr/share/zoneinfo 디렉토리 하위에 있는 세계 각 지역 및 도시에 대한 파일을 통해 timezone을 설정할 수 있다.

 

그러나 만약 alpine 버전을 베이스로 한 docker image를 빌드 중이라면,

아주 가벼운 친구이기 때문에 timezone 파일들 또한 존재하지 않는다.

 

그래서 alpine 버전에서 사용하는 package manager인 'apk'를 사용하여

tzdata package 를 설치하고, 그 후에 링크 작업을 실시한다.
 
 
아래는 Dockerfile 예시이다.
FROM node:16.13.1-alpine3.15

...

# Timezone setting

## install tzdata package for timezone setting
RUN apk add tzdata && ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

...

 


참고 포스트

https://stackoverflow.com/questions/57607381/how-do-i-change-timezone-in-a-docker-container