티스토리 뷰
어느날 크롤러를 개발하구서 각 크롤러들을 도커 컨테이너에 넣구서 돌렸습니다. 그리고 각 크롤러들은 담당 사이트 별로 데이터를 잘 긁어오고 있다가 갑자기 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
'개발환경 > K8S·Docker' 카테고리의 다른 글
[Docker] 4. Docker 우분투 컨테이너에서 작업 후 이미지 제작하기 (0) | 2023.02.26 |
---|---|
[Docker] 3. Docker 컨테이너 생성/구동/중지/삭제 명령어 익히기 (0) | 2023.02.25 |
[Docker] 2. Docker registry에서 이미지 다운받아 컨테이너 생성 및 구동하기 (0) | 2023.02.23 |
[Docker] 1. Ubuntu에 Docker 설치하기 (0) | 2023.02.22 |
[JSP] docker로 JSP 환경 쉽고 빠르게 구축하는 법 (0) | 2022.08.05 |