Docker

(트러블 슈팅) 컨테이너 시간대 문제 해결하기

무무11 2024. 12. 5. 22:18

Docker와 Git Actions를 이용해 배포자동화를 진행하던 중 발생했던 문제에 대해서 적어본다.

 

배포자동화가 적용되기 이전에는 직접 서버에 접속해 git pull을 이용해 코드를 받아 빌드를 진행하여 직접 배포를 진행했었다.

 

이때 시간대가 UTC 시간으로 나오는 문제가 있어서 우분투의 시간대 설정을 한국 시간대로 변경해주었다.

$ sudo timedatectl set-timezone Asia/Seoul

위 명령어로 쉽게 시간대 설정을 바꿀 수 있다.

 

이렇게 모든 것이 잘 작동하고 있었다. 배포자동화 작업 역시 진행이 완료되어 새로 배포가 진행되고 나서 문제가 발생하였다.

 

Docker를 이용해 배포를 새로 진행했더니 DB와 로그에 입력되는 시간이 9시간 이전인 것을 발견할 수 있었다.

 

시간대 관련해서 설정을 따로 건드린 것이 없던터라 살짝 당황했지만 문제를 금방 파악할 수 있었다.

 

도커 컨테이너는 하나의 독립적인 환경이기 때문에 호스트 컴퓨터와 별개로 시간대 설정이 기본값인 UTC로 설정되어 있는 것이다.

 

직접 컨테이너에 접속해서 시간대 설정이 UTC로 되어있음을 확인할 수 있었다.

 

떠올리고 찾아본 해결방법은 크게 2가지 였다.

 

먼저, 이미지 빌드 과정에 시간대를 한국어로 설정하는 명령어를 추가하는 것이다. Dockerfile을 수정하면 쉽게 문제를 해결할 수 있다.

 

실제로는 두 번째 방법으로 해결했는데, 호스트 서버의 시간대 설정을 컨테이너가 공유하도록 만드는 것이었다. 바인드 마운트를 이용하여 쉽게 해결할 수 있었다.

# docker-compose.yml 파일에 아래 부분 추가
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro

문제가 발생했을 때는 전혀 생각지도 못한 문제였기 때문에 살짝 당황했었다. 하지만 문제를 발견하고 얼마 지나지 않아 쉽게 해결할 수 있었다.

 

이런 문제가 생길 수 있다라는 사실을 모르고, DB나 로그를 잘 살펴보지 않았다면 한참동안 발견을 못했을 수도 있다. 이런 문제가 발생할 수 있다는 사실을 인지하고 앞으로 주의해야겠다.