도커 컴포즈 컨테이너 timezone 설정

냥무룩·2023년 11월 20일
0

트러블슈팅

목록 보기
3/4

도커 컴포즈를 이용하여 프로젝트 진행 중
카메라 이벤트를 DB에 저장하는데 카메라에서 보내주는 occurTime(이벤트 발생한 시간테이터)이 이상하게 나오는 것을 확인하였다.

9시간씩 차이나는 것을 보고 timezone 문제라고 생각이 되어 이벤트가 DB로 저장되는 경로를 확인해보았다.



이벤트 데이터 저장 과정

이벤트 발생(카메라) --> 카메라 앱이 MQTT pub --> 카메라 인터페이스 서버에서 MQTT sub --> 메인 서비스 관리 서버 --> DB 저장

처음에는 카메라 앱에서 잘못 보내는 것이라 생각하여 AI lab 팀에 물어봤지만 보내는 데이터는 문제 없이 들어오고 있었다.

MQTT 서버 로그와 카메라 인터페이스 서버에서는 카메라에서 받은 값을 정확히 전달하고 있었다.

그러나 메인 서버에서 DB로 저장하는 과정에서 달라졌다.

메인서버에서 디버깅을 진행하여 보니
데이터가 DB로 저장되는 과정에서 값이 바뀌어 전송된 것이었다.
java calender 클래스에서 현재 운영체제에서 사용하는 타임존을 사용하여 인스턴스를 생성한다.

DB의 타임존은 my.cnf 설정으로 KST로 되어 있었다.

하지만 메인 서버를 띄운 컨테이너 에서는 기본 timezone인 UTC로 설정되어 있었다.

그래서 DB로 전달하는 과정에서 UTC -> KST로 변환하면서 9시간을 더하여 저장이 되었던 것이다.

이 문제는 컨테이너의 Timezone을 수정해주는 것으로 간단하게 해결할 수 있다.

docker-compose 파일에 해당부분을 넣어준다.
environment:
TZ: "Asia/Seoul"

// 예시
services:
  main:
    container_name: vms-cms-con
    image: shinsw627/vms-cms
    ports:
      - '8888:8888'
    volumes:
      - ./cms/contents/web:/data/web
      - ./cms/configs:/configs
    environment:
      TZ: "Asia/Seoul"
    depends_on:
      - db-mysql
      - activemq

0개의 댓글