Docker 컨테이너가 호스트 컴퓨터와 시간을 자동 동기화합니까?


108

이미 도커 컨테이너의 시간대를 올바르게 변경했습니다. 주기적으로 시간을 동기화하려면 Docker 컨테이너 내부에 NTP 서버를 설치해야합니까? 그렇지 않으면 컨테이너가 호스트 컴퓨터의 시간을 동기화합니까?

답변:


103

boot2docker를 실행하는 OSX를 사용하는 경우 https://github.com/boot2docker/boot2docker/issues/290 문제를 참조하십시오.

OS가 절전 모드 인 동안 boot2docker 호스트의 시간 드리프트가 있기 때문에 시간 동기화가 문제가됩니다. Docker 컨테이너와의 시간 동기화는 컨테이너를 다음과 같이 실행하여 해결할 수 없습니다.-v /etc/localtime:/etc/localtime:ro

대신 지금은 OSX에서 주기적으로 실행해야합니다.

/usr/local/bin/boot2docker ssh sudo ntpclient -s -h pool.ntp.org

Kitematic 사용자를위한 업데이트

현재 OSX의 Docker를 시작하고 실행하기위한 권장 메커니즘 인 Kitematic 을 실행하는 경우 다음 명령을 주기적으로 실행해야합니다.

docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'

또는 이전 버전의 Docker의 경우

docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'

OSX 용 새로운 기본 Docker 사용자를위한 업데이트

새로운 Docker Beta는 VirtualBox 및 Docker Machine을 제거합니다. Docker의 최신 빌드 (현재 1.12.1-beta25 (빌드 : 11807))는 시간 불연속이 발생했을 때이를 감지하고 그에 따라 조정할 수있는 기능이있는 것 같습니다. 따라서 이것은 더 이상 문제가되지 않아야합니다 ... 만세 !!


감사합니다, 친절한 선생님!
seanmcl 2014 년

정말 고맙습니다. 이것이 효과가 있었던 유일한 것입니다.
Mark Bao 2014

1
: 추정 된 수정 / 완화를 참조하십시오 github.com/boot2docker/boot2docker/pull/661
최대 Gasner

7
Docker for OSX Beta의 경우 컨테이너를 다시 시작해도 작동하지 않았고 다시 생성되지도 않았습니다. 대신 Docker 자체를 다시 시작해야했습니다 (메뉴 모음 아이콘에서).
Pol

이 답변을 기반으로 CLI 도구 를 작성하여 5 분마다 docker-machine VM의 시간을 동기화했습니다. 내 OSX El Capitan 및 Windows 7 Pro에서 작동
dadads

50

https://github.com/sameersbn/docker-gitlab/issues/77

sameersbn의 답변을 참조하십시오.

option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"

2
옵션 2가 저에게 효과적이었습니다. 나는 실제로 다른 옵션보다 더 명확하다는 것을 좋아합니다.
Ryan Walls

옵션 2도 저에게 효과적이었습니다. etc / localtime 폴더가 없기 때문에 Mac에서 옵션 1로 오류가 발생합니다.
Zergleb 2015 년

46

가장 간단한 해결책은 -v /etc/localtime:/etc/localtime:ro옵션으로 컨테이너를 실행하는 것 같습니다. 그러므로:

#run without tz info:
docker run --rm -t -i ubuntu date
Wed Apr  2 18:40:07 UTC 2014
# run with tz info:
docker run --rm -t -i -v /etc/localtime:/etc/localtime:ro ubuntu date
Wed Apr  2 11:40:29 PDT 2014

25
원래 질문이 시간대 (예 : 컨테이너가 DST 및 시간대 변경을 준수하는지 확인) 또는 정확한 시간 유지 (예 : 컨테이너 시계가 표류하지 않는지 확인)에 관한 것이 었는지 모르겠습니다. 시간대에 관한 것이라면 그 대답은 완벽합니다. 클럭 드리프트에 관한 것이라면 걱정할 필요가 없습니다. 컨테이너의 클럭은 호스트의 클럭과 동일합니다 (컨테이너가 --privileged모드 에서 실행중인 경우를 제외하고는 변경할 수 없다는 점만 제외 ).
jpetazzo 2014

@jpetazzo는 동의했습니다. date컨테이너가 호스트에서 시간을 가져 오는지 확실하지 않을 수 있으므로 MWE의 호스트 컴퓨터에 대한 호출을 포함해야 합니다.
shabbychef 2014

1
setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
Brian Tingle 2014-10-17

이것은 OSX의 docker 1.3에서 작동하지 않는 것 같습니다. Brian Tingle과 같은 오류입니다.
esilver

1
@esilver의 boot2docker는 기본적으로 / 사용자 아래에 하위 디렉토리를 마운트 할 수 있습니다
menghan

27

Mac OS X 베타 용 Docker에서 Alpine Linux를 기반으로하는 VM에서 상당한 드리프트를 경험했습니다. 에서 알파인 리눅스 FAQ 다음과 같은 명령을 사용하여 VM의 시계를 동기화 할 수 있습니다.

ntpd -d -q -n -p pool.ntp.org

그러나 VM의 터미널에 액세스하는 것은 또 다른 질문이며 screen 명령을 사용하면 수행 할 수 있습니다.

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

그 경로는 내 시스템에서 /dev/ttys003.

일단 들어가면 moby login단순히 root암호가 없다는 점에 유의하십시오 . 완료 한 후 CTRL-A, D는 화면 세션에서 연결을 끊습니다.

참고 : 이것은 Mac 문제 해결 용 Docker에 문서화되어 있었지만 삭제 된 것으로 보입니다. 저는 운이 좋게도 Dockercon 2016에서 그것을 볼 수있었습니다. Docker는 VM을 경험에서 완전히 추상화하려고하는 것 같습니다. 이것이 더 이상 문서화되지 않은 이유를 설명합니다.


3
이 간헐적 고정 표시기 기계 않고 새의 RC를 사용하는 사람들에게 새로 허용 대답해야한다
Blizz

2

Docker의 osx 시간 드리프트에 대한 현재 솔루션 (2018 년 4 월) :

NTP 서버에 Mac이 있지만 컨테이너가있는 고정 클럭 드리프트 :

에서 https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :

시스템이 NTP 서버에 액세스 할 수없는 경우 최대 절전 모드 후에 Mac 용 Docker에 표시되는 시간이 호스트와 상당히 동기화되지 않을 수 있습니다. 또한 사용 중에 시간이 천천히 동기화되지 않을 수 있습니다. 최대 절전 모드 후 시간을 수동으로 재설정하려면 다음을 실행하십시오.

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

또는 두 문제를 모두 해결하기 위해 로컬 시계를 호스트에 대한 낮은 우선 순위 (높은 계층) 대체 NTP 시간 원본으로 추가 할 수 있습니다. 이렇게하려면 호스트의 /etc/ntp-restrict.conf를 편집하여 다음을 추가하십시오.

server 127.127.1.1              # LCL, local clock
fudge  127.127.1.1 stratum 12   # increase stratum

그런 다음 다음을 사용하여 NTP 서비스를 다시 시작합니다.

sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist

1

도커 작성 사용법 :

추가 /etc/localtime:/etc/localtime:ro받는 사람volumes 속성.

예제를 보여주기 위해이 링크 를 보십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.