[docker] 도커의 시간이 호스트의 시간과 동기화되는지 확인하는 방법은 무엇입니까?

Linode 서버에서 실행중인도 커가 있습니다. 때때로 나는 시간이 도커에게 적절하지 않다는 것을 알았습니다. 현재 모든 도커의 실행 스크립트를 다음 코드 줄을 포함하도록 변경했습니다.

yum install -y ntp
service ntpd stop
ntpdate pool.ntp.org

그러나 내가 이상적으로하고 싶은 것은도 커가 호스트와 시간을 동기화해야한다는 것입니다. 이를 수행하는 방법이 있습니까?



답변

이 답변의 출처는 다음의 답변에 대한 주석입니다. Docker 컨테이너가 호스트 시스템과 시간을 자동 동기화합니까?

답을 살펴본 결과 도커 컨테이너에서 클럭 드리프트가 발생할 방법이 없다는 것을 깨달았습니다. Docker는 호스트와 동일한 시계를 사용하며 Docker는이를 변경할 수 없습니다. ntpdate도커 내부에서 수행하는 것이 작동하지 않음을 의미합니다.

올바른 방법은 다음을 사용하여 호스트 시간을 업데이트하는 것입니다. ntpdate

시간대 동기화에 관한 한 -v /etc/localtime:/etc/localtime:ro작동합니다.


답변

Docker 컨테이너의 볼륨으로 로컬 파일 (/ etc / timezone 및 / etc / localtime)을 추가 할 수 있습니다.

docker-compose.yml다음 줄로 업데이트하십시오 .

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

이제 컨테이너 시간은 호스트와 동일합니다.


답변

boot2docker 를 사용 중이고 ntp docker VM 내에서 작동하지 않지만 (ntp 패킷을 전달하지 않는 프록시 뒤에 있음) 호스트가 시간 동기화 된 경우 호스트에서 다음을 실행할 수 있습니다.

docker-machine ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"

이렇게하면 컴퓨터의 현재 시간 (UTC 시간대)을 문자열로 전송하여 date(다시 UTC 시간대로) 도커 VM 시간을 설정합니다 .

참고 : Windows에서는 bash 셸 (msys git에서) 내에서 다음을 사용합니다.

docker-machine.exe ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"


답변

이것이 Fedora 20 호스트에서 저에게 효과적이었습니다. 다음을 사용하여 컨테이너를 실행했습니다.

docker run -v /etc/localtime:/etc/localtime:ro -i -t mattdm/fedora /bin/bash

처음에 /etc/localtime/usr/share/zoneinfo/Asia/Kolkata 인도 표준시와 의 소프트 링크였습니다 . date컨테이너 내부에서 실행 하면 호스트와 동일한 시간이 표시되었습니다. 셸을 종료하고 docker stop <container-id>.

다음으로이 파일을 제거 /usr/share/zoneinfo/Singapore하고 테스트 목적으로 링크했습니다 . 호스트 시간이 싱가포르 시간대로 설정되었습니다. 그리고 docker start <container-id>. 그런 다음 사용하여 다시 쉘에 액세스했습니다.nsenter 시간이 이제 싱가포르 시간대로 설정되었음을 알았습니다.

docker start <container-id>
docker inspect -f {{.State.Pid}} <container-id>
nsenter -m -u -i -n -p -t <PID> /bin/bash

따라서 여기서 핵심 -v /etc/localtime:/etc/localtime:ro은 컨테이너를 처음 실행할 때 사용하는 것입니다. 이 링크 에서 찾았습니다 .

도움이 되었기를 바랍니다.


답변

그러면 도커 서버의 시간이 재설정됩니다.

docker run --rm --privileged alpine hwclock -s

다음에 컨테이너를 만들 때 시계가 정확해야합니다.

출처 : https://github.com/docker/for-mac/issues/2076#issuecomment-353749995


답변

docker-machine을 사용하는 경우 가상 머신이 드리프트 될 수 있습니다. 다시 시작하지 않고 가상 머신의 시계를 업데이트하려면 다음을 실행하십시오.

docker-machine ssh <machine-name|default>
sudo ntpclient -s -h pool.ntp.org

이렇게하면 NTP를 사용하는 가상 머신의 시계가 업데이트되고 시작된 모든 컨테이너의 날짜가 정확 해집니다.


답변

-1 시간 4 분의 시간 오프셋에 직면했습니다.

Docker 자체를 다시 시작하면 문제가 해결되었습니다.

일반적으로 시간대를 설정하려면 :

  1. 컨테이너에 ssh :
    docker exec -it my_website_name bash

  2. 운영 dpkg-reconfigure tzdata

  3. 운영 date