Docker 컨테이너에서 시간대를 동기화하는 방법

Docker 컨테이너에서 시간대를 동기화하는 방법

스택의 모든 컨테이너에서 비슷한 시간대를 갖는 데 몇 가지 문제가 있습니다 docker-compose.

TZ=Europe/Paris컨테이너에 환경 변수를 추가하고 다음을 사용해 보았습니다 .

volumes:
  -v /etc/timezone:/etc/timezone:ro
  -v /etc/localtime:/etc/localtime:ro

현재 /etc/timezoneDebian/Ubuntu 기반 컨테이너에서는 실행(번들링)할 수 있지만 Alpine 기반 컨테이너에서는 실행할 수 없습니다.

모범 사례는 무엇이며/또는 모든 Linux 컨테이너에 적용되는 것은 무엇입니까?

답변1

볼륨을 사용하여 시간대를 변경하는 것이 잘 작동하지 않습니다. 호스트와 컨테이너 사이에 많은 종속성이 발생합니다. kubernetes 또는 호스팅 환경에서 실행 중인 경우 호스트의 시간대를 제어할 수 없습니다.

변수를 사용하는 것이 좋습니다 TZ.

우분투의 경우 이미지에 이미 패키지가 있으면 TZ 변수를 설정할 수 있습니다 tzdata.

우분투 18.04/19.04/19.10의 경우

이것들은 작동하지 않습니다

for V in 18.04 18.10 19.04 19.10
do
   docker run -e TZ=America/New_York -it ubuntu:${V} /bin/bash -c date
done

하지만 이것들은

for V in 18.04 18.10 19.04 19.10
do
    docker run -e TZ=America/New_York -it ubuntu:${V} \
       /bin/bash -c '( export DEBIAN_FRONTEND=noninteractive ; apt-get update ; apt-get install tzdata ) >/dev/null 2>&1 ; date'
done

*DEBIAN Stretch/Buster의 경우*

이들은 작동 중입니다

docker run -e TZ=America/New_York -it debian:stretch /bin/bash -c date
docker run -e TZ=America/New_York -it debian:buster-slim /bin/bash -c date
docker run -e TZ=America/New_York -it debian:buster /bin/bash -c date
docker run -e TZ=America/New_York -it debian:stretch-slim /bin/bash -c date

알프스를 위해

이 작업은 다음과 같습니다.

docker run -e TZ=America/New_York -it alpine:3.10 date

이것은 작동하지 않습니다:

docker run -e TZ=America/New_York -it alpine:3.10 /bin/sh -c '(apk update ; apk add tzdata)>/dev/null 2>&1  ; date '

CentOS의 경우

이들은 작동 중입니다

 for V in 6 7 8 ; 
 do  
      docker run -e TZ=America/New_York -it centos:${V}  /bin/bash -c date ; 
 done

관련 정보