스택의 모든 컨테이너에서 비슷한 시간대를 갖는 데 몇 가지 문제가 있습니다 docker-compose
.
TZ=Europe/Paris
컨테이너에 환경 변수를 추가하고 다음을 사용해 보았습니다 .
volumes:
-v /etc/timezone:/etc/timezone:ro
-v /etc/localtime:/etc/localtime:ro
현재 /etc/timezone
Debian/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