TOOL/Docker 2020. 4. 17. 19:45

Docker

도커 컨테이너 시간 맞추기 - Correct Docker Container Date

1. 시간이 맞지 않는다.

  1. 여러분의 Container가 시간이 맞지 않는다는 것을 알았다면 date를 확인해 보자

    • Container가 실행중이라면

      docker exec your-container-name date
    • Container를 새로 생성한다면

      docker run -it your-container-name date
  2. 결과

    Thu Apr 16 08:43:30 UTC 2020

2. 테스트

작업중인 소중한 Container에 적용하기 전에

기본 ContainerAlpine을 이용하여 테스트해보자.

2-1. alpine을 생성하고 date만 찍고 지워버리면서 테스트해보자.

  1. 바로실행하여 기본사항 TEST

    • 1) 실행

      docker run --rm alpine date
    • 2) 결과

      Thu Apr 16 08:43:30 UTC 2020
  2. Host의 -v옵션을 이용하여 Host PC의 /etc/localtime을 공유해서 다시 TEST

    docker run --rm -v /etc/localtime:/etc/localtime alpine date
    Thu Apr 16 17:44:30 KST 2020
  3. Dockerfile로 빌드 & 실행 방식으로도 테스트

    • 1) Dockerfile 생성

      FROM alpine
      RUN apk add --no-cache tzdata
      ENV TZ Asia/Seoul
    • 2) Image생성

      docker build -t image-name .
    • 3) 실행

      docker run --rm --name container-name image-name date
    • 4) 결과

      Thu Apr 16 17:44:30 KST 2020
    • 5) Image제거

      docker rmi image-name

2-2. 만약! 여러분의 Host PC 마저도 시간이 안맞는 것이라면!?

  • 다음을 통해서 Host의 Timezone을 서울(또는 다른 지역)로 맞추고 바로 위의 2-1을 다시 테스트한다.

    sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
    cat /etc/localtime

2-3. 혹은 일반적인 Docker Container라면 환경변수 설정으로 충분하다.

  • TZ를 원하는 시간대옵션으로 설정한다.

      docker run --rm -e TZ=Asia/Seoul debian:jessie date
  • 또는 Docker for Windows 사용자라면 시간파일을 공유할 수 없기때문에 Container 자체를 설정할 수 있는 방향으로 가야한다.

2-4. 또는 다시 Container를 생성하기 어려운 상황이라면 Linux 환경에 따라 패키지매니저로 tzdata를 설치하자

※ Docker Container는 대부분 최소화되어 있기 때문에 패키지매니저가 구버전인 경우가 많다. 설치가 안되는 경우에는 패키지매니저의 update를 선행하면 좋다.

  • apk

    apk update
    apk add --no-cache tzdata
  • apt-get

    apt-get update
    apt-get install tzdata
  • yum

    yum update
    yum install tzdata

그리고 환경변수도 잡아준다.

export TZ=Asia/Seoul

3. Reference - 참조