[docker] 도커 컨테이너 서버 시간 변경하기

카카오봇 UDP 서버를 도커에 올렸는데 서버 시간이 맞지 않아서 이상동작을 하는 것을 확인했습니다.

확인해보니 서버 시간이 9시간 전으로 잡혀있더군요.

 

타임존을 셋팅해주지 않아서 디폴트로 다른 ZONE 시간대로 설정된 것으로 파악하였습니다. 서버 시간을 변경하는 방법은 직접 도커 컨테이너에 접속해서 시간 설정을 변경해주면 됩니다. 하지만 이렇게 하게 될 경우 이렇게 하게 될 경우 컨테이너를 재생성하거나 재실행 시 또 시간을 바꿔주어야 하는 문제가 발생합니다. 그래서 위 방법은 서버를 재실행하기 어려운 상황에서 임시방편으로 사용할 수 있는 방법입니다.

 

그래서 1회성이 아닌 도커 컨테이너 실행 시점부터 정상적인 시간대로 맞춰주기 위해 때 TIMEZONE 정보를 넣어주고 도커 이미지를 생성해주면 됩니다. 

 

서버시간 변경 1안

ENV TZ Asia/Seoul 을 추가해서 타임존을 대한민국 시각에 맞도록 변경하셔야 합니다.

아래는 타임존 옵션을 추가한 Dockerfile 내용입니다.

 

FROM python:3.6
WORKDIR /app
COPY . /app
EXPOSE 19051 9050/udp
RUN pip install --no-cache-dir -r ./requirements.txt
ENV TZ Asia/Seoul
CMD ["python", "./app/main.py"]

 

이렇게 도커 이미지를 생성후 컨테이너를 실행시켜서 확인해보았습니다.

설정 전 시간과 설정 후 시간을 체크해보니 아래와 같은 차이가 있습니다.

 

타임존을 설정하지 않으면 UTC 기준 9시간 정도 빠르게 시간이 설정되는 것을 확인할 수 있습니다.

 

서버시간 변경 2안

이미지를 재생성하지 않고 docker 실행 시점에도 타임존 설정이 가능합니다.

 

docker run 명령줄에 -e TZ=Asia/Seoul 를 넣고 실행시켜주면 지정한 타임존으로 서버가 실행됩니다.

아래는 타임존을 넣고 실행한 예시명령어 입니다.

docker run -d -p 8080:8080 -e TZ=Asia/Seoul docker_image_name

 

 

이외에도 우분투 서버에 직접 접속해서 하는 방법과 time.windows.com 과 같은 서버시간을 제공해주는 서버를 통해 동기화 하는 방식도 존재하니 다양한 방법으로 문제해결을 해볼 수 있을 것입니다.