티스토리 뷰

728x90
반응형

어느날 크롤러를 개발하구서 각 크롤러들을 도커 컨테이너에 넣구서 돌렸습니다. 그리고 각 크롤러들은 담당 사이트 별로 데이터를 잘 긁어오고 있다가 갑자기 4월 11일 날짜의 내용을 가져오다가 다음 날인 4월 12일 날짜의 내용을 가져왔다고 하는 겁니다. 매일 딱 한번 가져오는 로직이었는데 "어떻게 당일 날짜가 아닌 다음날 날짜의 내용이 가져와진걸까?" 하고 의문이 들었는데요.

 

알고보니 이번 문제는 도커 컨테이너의 Timezone 문제였습니다. 이 문제는 도커 컨테이너에 넣기 전에 제 로컬 컴퓨터에서 돌려봤을 때 이상이 없음을 확인하구서 도커 컨테이너에 올린 거였는데요. 생각해보니 로컬에서는 기본적으로 KST (한국시간) 타임존으로 설정된 상태였던 것이었죠.

 

docker container(도커 컨테이너)에서는 기본적으로 Timezone 이 UTC(GMT)로 설정되어 있습니다.

$ sudo docker exec -it d5dc3c5b0202 bash
root@d5dc3c5b0202:/app# date
Mon Apr 11 06:31:10 UTC 2022

 

리눅스에서 timezone 설정을 변경하는 법은 TZ 환경변수의 값을 변경해주는 방법이 있습니다.

그래서 이 TZ 환경변수를 도커 컨테이너에서 컨테이너가 시작할 때 환경변수를 셋팅해주게 한다면 timezone 설정이 완료됩니다.

 

저는 docker-compose.yml 파일을 사용해서 컨테이터를 구축해주었기 때문에 아래와 같이 작성해주었습니다.

version: "3"
services:
  app:
    build: .
    volumes:
      - ./:/app/
    entrypoint: ["python", "/app/app.py"]
    restart: always
    environment:
      - TZ=Asia/Seoul

environment 속성에 TZ=Asia/Seoul 값을 줌으로써 타임존 설정을 한국시간으로 해주었습니다.

 

다시 date 명령어를 사용해서 컨테이너의 시간대를 확인해주면 아래와 같이 UTC 에서 KST 로 변경된 것을 확인할 수 있습니다.

$ sudo docker exec -it d5dc3c5b0202 bash
root@d5dc3c5b0202:/app# date
Mon Apr 11 15:31:10 KST 2022

UTC와 KST는 9시간 차이가 있기 때문에 위 결과와 아래 결과를 비교했을 때 잘 변경된 것을 알 수 있겠습니다.

 

다른 나라의 타임존은 어떤 이름을 가지고 있는지, 시간대차이는 어떤지, 등등을 확인하고 싶으시다면 아래 링크를 참고하시면 되겠습니다.

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

 

List of tz database time zones - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search World map showing time zones from the tz database version 2017a This is a list of time zones from release 2021e of the tz database.[1] Canonical - The primary, preferred zone name. Lin

en.wikipedia.org

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#SEOUL

 

728x90
반응형
댓글