Odpowiedzi:
Jeśli używasz systemu OSX z uruchomionym boot2dockerem, zobacz ten problem: https://github.com/boot2docker/boot2docker/issues/290
Synchronizacja czasu staje się problemem, ponieważ host boot2docker ma dryf czasu, gdy system operacyjny śpi. Nie można rozwiązać synchronizacji czasu z kontenerem docker, uruchamiając kontener z-v /etc/localtime:/etc/localtime:ro
Zamiast tego na razie musisz okresowo uruchamiać to na OSX:
/usr/local/bin/boot2docker ssh sudo ntpclient -s -h pool.ntp.org
Aktualizacja dla użytkowników Kitematic
Jeśli używasz Kitematic , który jest teraz sugerowanym mechanizmem uruchamiania i uruchamiania na Dockerze w OSX, będziesz musiał okresowo uruchamiać to polecenie:
docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'
Lub w przypadku starszych wersji docker
docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'
Aktualizacja dla użytkowników nowej natywnej platformy Docker dla OSX
Nowa Docker Beta eliminuje VirtualBox i Docker Machine. Wydaje się, że najnowsze wersje dockera (obecnie 1.12.1-beta25 (kompilacja: 11807)) mają zdolność wykrywania nieciągłości czasu i odpowiednich dostosowań. Dlatego nie powinno to już stanowić problemu ... hura !!
https://github.com/sameersbn/docker-gitlab/issues/77
Zobacz odpowiedź sameersbn.
option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"
Najprostszym rozwiązaniem wydaje się być uruchomienie kontenera z -v /etc/localtime:/etc/localtime:ro
opcją. A zatem:
#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
--privileged
trybie).
date
na maszynie hosta w moim MWE, ponieważ w przeciwnym razie być może nie jest jasne, że kontener pobiera swój czas od hosta.
setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
Na platformie Docker dla systemu Mac OS X Beta doświadczyłem znacznego dryfu na maszynie wirtualnej opartej na Alpine Linux. Z Alpine Linux FAQ można zsynchronizować zegar maszyny wirtualnej za pomocą następującego polecenia.
ntpd -d -q -n -p pool.ntp.org
Jednak uzyskanie dostępu do terminala na maszynie wirtualnej to kolejna kwestia, którą można zrobić, używając polecenia screen.
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Ta ścieżka jest dowiązaniem symbolicznym, które w moim systemie wskazuje na /dev/ttys003
.
Po wejściu zwróć uwagę, że moby login
jest to po prosturoot
nie ma hasła. Po zakończeniu CTRL-A, D rozłącza się z sesją screen.
UWAGA: Było to udokumentowane w Docker for Mac Trouble Shooting, ale wydaje się, że zostało usunięte. Miałem szczęście, że pokazano mi to podczas Dockercon 2016. Wygląda na to, że Docker próbuje całkowicie wyodrębnić maszynę wirtualną z doświadczenia, co wyjaśnia, dlaczego nie jest już udokumentowane.
Aktualne rozwiązanie dla osx time drift w dockerze (kwiecień 2018):
Mam komputer Mac na serwerze NTP, ale ten stały dryf zegara z kontenerami:
Z https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :
Jeśli twój system nie ma dostępu do serwera NTP, to po hibernacji czas widoczny przez Docker for Mac może być znacznie niezsynchronizowany z hostem. Ponadto czas może powoli tracić synchronizację podczas użytkowania. Aby ręcznie zresetować czas po hibernacji, uruchom:
docker run --rm --privileged alpine hwclock -s
Lub, aby rozwiązać oba problemy, można dodać zegar lokalny jako rezerwowe źródło czasu NTP o niskim priorytecie (o wysokim priorytecie) dla hosta. Aby to zrobić, edytuj plik /etc/ntp-restrict.conf hosta, aby dodać:
server 127.127.1.1 # LCL, local clock
fudge 127.127.1.1 stratum 12 # increase stratum
Następnie uruchom ponownie usługę NTP za pomocą:
sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Dodaj /etc/localtime:/etc/localtime:ro
dovolumes
atrybutu.
Spójrz na ten link, aby zademonstrować przykład.