가장 일반적이고 배포판에 구애받지 않는 방식으로 현지 시간/시간대를 설정하는 방법은 무엇입니까?

가장 일반적이고 배포판에 구애받지 않는 방식으로 현지 시간/시간대를 설정하는 방법은 무엇입니까?

잘못된 시간대로 실행되는 Docker 컨테이너를 만들었습니다. 개인적으로 내 시간대(유럽/스톡홀름, GMT+1)에서 실행해야 합니다. 프로젝트는 오픈 소스이므로 다른 사용자도 이를 변경하고 싶을 수 있습니다. 나는 누구든지 Dockerfile이나 docker-compose.yml에서 이를 쉽게 변경할 수 있도록 만들고 싶습니다.

가능하다면 누군가가 다른 배포판을 사용하려는 경우 CentOS뿐만 아니라 솔루션도 적용할 수 있기를 바랍니다.

내 도커 컨테이너에서 현지 시간/시간대를 설정하는 가장 배포판에 구애받지 않는 접근 방식은 무엇입니까?


이 두 가지 접근 방식은 일반적인 것처럼 보이지만 이것이 실제로 나에게 가장 좋은 방법인지는 확실하지 않습니다.

TZ 환경 변수

일부 Linux 배포판은 TZ 환경 변수를 읽습니다. 그러나 이미지를 사용할 때 작동하지 않는 것으로 나타났습니다 centos:7.

/etc/현지시간

docker-compose.yml의 호스트에 /etc/localtime컨테이너 를 매핑할 수 있습니다 . /etc/localtime그러나 이렇게 할 때 사용하는 배포판은 /etc/timezoneUTC에 남아 있고 읽을 수 있는 소프트웨어는 잘못된 시간대를 읽습니다.

답변1

배포판에 구애받지 않으려면 어떤 배포판이 사용되고 있는지 감지하는 스크립트가 필요합니다. 이는 각 배포판 "계열"이 시간대를 표시하는 방법이 다르기 때문입니다. 일부의 경우 Dockerfile에 다음을 추가하면 효과가 있을 수 있습니다.

RUN 에코 "유럽/스톡홀름" > /etc/timezone

다른 것(예: Debian)에서는 위의 내용을 사용한 후 다음과 같은 다른 Dockerfile 명령을 따라야 합니다.

RUN RUN sudo dpkg-reconfigure -f 비대화형 tzdata

다른 배포판(CentOS를 포함한 IIRC)에는 다음과 같은 것이 필요합니다.

RUN ln -s /usr/share/zoneinfo/Europe/Stockhom /etc/localtime

배포판에 구애받지 않게 만들려면 시간대를 재구성하기 위한 각 배포판의 방법을 조사해야 합니다. /etc/localtime을 보면 텍스트 파일이 아니라는 것을 알 수 있습니다.

관련 정보