Docker 컨테이너는 시간 정보를 어디서 얻습니까? 기본 우분투 : trusty 이미지에서 일부 컨테이너를 만들었으며이를 실행하고 ‘날짜’를 요청하면 UTC 시간이 표시됩니다.
잠시 동안 Dockerfile에서 다음을 수행 하여이 문제를 해결했습니다.
RUN sudo echo "America/Los_Angeles" > /etc/timezone
그러나 어떤 이유로 작동이 중지되었습니다. 온라인 검색에서 아래 제안을 보았습니다.
docker run -v /etc/timezone:/etc/timezone [image-name]
이 두 가지 방법 모두 시간대를 올바르게 설정합니다!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
무엇을 제공하는지 아는 사람이 있습니까?
답변
여기서 비밀은 dpkg-reconfigure tzdata
단순히 /etc/localtime
의 파일에 대한 사본, 하드 링크 또는 심볼릭 링크 (심볼릭 링크가 선호 됨)로 작성된다는 것입니다 /usr/share/zoneinfo
. 따라서 Dockerfile에서 전체적으로이 작업을 수행 할 수 있습니다. 치다:
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
그리고 보너스로 TZ도 컨테이너에 올바르게 설정됩니다.
이것은 또한 배포에 구애받지 않으므로 거의 모든 Linux에서 작동합니다.
참고 : 알파인 기반 이미지를 사용하는 경우 tzdata
먼저 설치해야합니다 . ( 여기 에서이 문제 참조 )
다음과 같습니다 :
RUN apk add --no-cache tzdata
ENV TZ America/Los_Angeles
답변
일반적으로 다음과 같이 docker 컨테이너에 환경 변수를 설정하면 충분합니다.
docker run -e TZ=Europe/Amsterdam debian:jessie date
물론 이것은 또한 작동합니다 docker-compose
.
답변
/etc/localtime
이미지에 마운트 하여 동기화하는 host -v
것이 가장 인기있는 이미지 입니다.
그러나 이슈 12084 참조 :
소프트웨어에서 파일
/etc/timezone
을 설정 해야하는 경우 작동하지 않기 때문에 올바르지 않습니다 .
그런 식으로 사용하면 기본값으로 남습니다etc/UTC
.실제로 도커 컨테이너 안에 표준 시간대를 설정하는 완벽한 방법이 없다는 것을 확인했습니다.
결국이 솔루션에 정착했습니다.앱 도커 파일 :
# Relocate the timezone file
RUN mkdir -p /config/etc && mv /etc/timezone /config/etc/ && ln -s /config/etc/timezone /etc/
앱 진입 점 스크립트 :
# Set timezone as specified in /config/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
/config
특정 국가 또는 지역으로 현지화 된 데이터 볼륨 도커 파일 :
# Set the time zone
RUN echo "Europe/London" > /config/etc/timezone
… 3 개의 별도 파일이
/etc/localtime
포함되어 있으며 모든 런타임 컨테이너 시작 시마다 다시 작성하기 때문에 우아하지 않습니다 . 오히려 낭비입니다.그러나 제대로 작동하고 기본 앱 이미지와 각 국가 별 로컬 구성을 성공적으로 분리합니다.
3 줄의 코드로
답변
도커 컨테이너에서 로컬 파일 (/ etc / timezone 및 / etc / localtime)을 볼륨으로 추가 할 수 있습니다.
docker-compose.yml
다음 줄로 업데이트하십시오 .
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
이제 컨테이너 시간은 호스트와 동일합니다.
답변
우분투 16.04 이미지에는 버그가 있습니다. 해결책은
ENV TZ 'Europe/Tallinn'
RUN echo $TZ > /etc/timezone && \
apt-get update && apt-get install -y tzdata && \
rm /etc/localtime && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata && \
apt-get clean
답변
다음을 기반으로 도커 이미지를 사용하는 경우 ubuntu
:
# Change the docker default timezone from UTC to SGT
echo "Asia/Singapore" > /etc/timezone
dpkg-reconfigure tzdata
date
답변
정보와 문제에 대한 링크에 대한 VonC에 감사드립니다. 이것은 복잡한 혼란처럼 보이 므로이 문제를 해결하는 방법에 대한 내 자신의 아이디어를 테스트했으며 훌륭하게 작동하는 것 같습니다.
>docker run -it ubuntu:trusty /bin/bash
#dpkg-reconfigure tzdata
(내 시간대를 선택하라는 메시지를 따릅니다)
>docker commit [container-id] chocko/ubuntu:local
그런 다음 Dockerfile을 다음과 같이 업데이트했습니다.
FROM chocko/ubuntu:local
간과하기가 너무 쉽기 때문에 이것에 문제가있는 것 같습니다.