Podając już poprawnie zmieniłem strefę czasową kontenera dockerowego. Czy muszę zainstalować serwer NTP wewnątrz kontenera Docker, aby okresowo synchronizować czas, czy też kontener będzie synchronizował czas z maszyną hosta?
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.
źródło
Najprostszym rozwiązaniem wydaje się być uruchomienie kontenera z
-v /etc/localtime:/etc/localtime:ro
opcją. A zatem:źródło
--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.
Jednak uzyskanie dostępu do terminala na maszynie wirtualnej to kolejna kwestia, którą można zrobić, używając polecenia screen.
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.
źródło
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:
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ć:
Następnie uruchom ponownie usługę NTP za pomocą:
źródło
użycie docker-compose:
Dodaj
/etc/localtime:/etc/localtime:ro
dovolumes
atrybutu.Spójrz na ten link, aby zademonstrować przykład.
źródło