Il contenitore docker sincronizzerà automaticamente l'ora con la macchina host?


108

Dando ho già cambiato correttamente il fuso orario del container docker. Devo installare un server NTP all'interno del container Docker per sincronizzare periodicamente l'ora o il container sincronizzerà l'ora dal suo computer host?

Risposte:


103

Se sei su OSX con boot2docker in esecuzione, consulta questo problema: https://github.com/boot2docker/boot2docker/issues/290

La sincronizzazione dell'ora diventa un problema perché l'host boot2docker ha la sua deriva temporale mentre il tuo sistema operativo è addormentato. La sincronizzazione dell'ora con il container Docker non può essere risolta eseguendo il container con-v /etc/localtime:/etc/localtime:ro

Invece, per ora, devi eseguirlo periodicamente su OSX:

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

Aggiornamento per gli utenti di Kitematic

Se stai eseguendo Kitematic , che ora è il meccanismo suggerito per iniziare a lavorare su Docker in OSX, dovrai eseguire periodicamente questo comando:

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

Oppure, per le versioni precedenti di docker

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

Aggiornamento per gli utenti del nuovo Docker nativo per OSX

La nuova Docker Beta elimina VirtualBox e Docker Machine. Le ultime build di docker (attualmente 1.12.1-beta25 (build: 11807)) sembrano avere la capacità di rilevare quando c'è stata una discontinuità temporale e di adattarsi di conseguenza. Quindi, questo non dovrebbe più essere un problema ... evviva !!


Grazie gentile signore!
seanmcl

Grazie mille. Questa era l'unica cosa che funzionava.
Mark Bao

1
Vedi la presunta correzione / mitigazione: github.com/boot2docker/boot2docker/pull/661
Max Gasner

7
Si noti che per Docker per OSX Beta, il riavvio del contenitore non ha funzionato e nemmeno ricrearlo. Invece, ho dovuto riavviare Docker stesso (dall'icona della barra dei menu).
Pol,

Ho scritto uno strumento CLI basato su questa risposta per sincronizzare l'ora sulle VM della macchina docker ogni 5 minuti. Funziona sul mio OSX El Capitan e Windows 7 Pro
dadads

50

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

Vedi la risposta di sameersbn.

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

2
L'opzione 2 ha funzionato per me. In realtà mi piace che sia più esplicito rispetto alle altre opzioni.
Ryan Walls

Grazie l'opzione 2 ha funzionato anche per me. Ricevo un errore sul mio Mac con l'opzione 1 perché non ho una cartella etc / localtime.
Zergleb

46

La soluzione più semplice sembra essere quella di eseguire il contenitore con l' -v /etc/localtime:/etc/localtime:roopzione. Così:

#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
Non so se la domanda originale riguardasse più i fusi orari (ad esempio assicurandosi che il contenitore rispetti l'ora legale e le modifiche del fuso orario) o il controllo preciso dell'ora (ad esempio assicurandosi che l'orologio del contenitore non si sposti). Se si tratta di fusi orari, la risposta è perfetta. Se si tratta di clock drift, non devi preoccuparti: l'orologio del contenitore è lo stesso dell'orologio dell'host (tranne per il fatto che il contenitore non può cambiarlo, tranne quando è in esecuzione in --privilegedmodalità).
jpetazzo

@jpetazzo d'accordo; Avrei dovuto includere una chiamata a datesulla macchina host nel mio MWE, poiché altrimenti forse non è chiaro che il contenitore riceve l'ora dall'host.
shabbychef

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

Questo non sembra funzionare per Docker 1.3 su OSX. Stesso errore di Brian Tingle.
esilver

1
@esilver boot2docker può montare solo sottodirectory in / Users per impostazione predefinita
menghan

27

Su Docker per Mac OS X Beta, ho riscontrato una significativa deriva sulla VM, che è basata su Alpine Linux. Dalle FAQ di Alpine Linux è possibile sincronizzare l'orologio della VM con il seguente comando.

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

Tuttavia, ottenere l'accesso a un terminale sulla VM è un'altra domanda, che può essere eseguita se si utilizza il comando sullo schermo.

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

Quel percorso è un collegamento simbolico, che sul mio sistema punta a /dev/ttys003 .

Una volta entrato, nota che moby loginè semplicementeroot senza password. Dopo aver finito, CTRL-A, D si disconnetterà dalla sessione dello schermo.

NOTA: questo era documentato su Docker per Mac Risoluzione dei problemi, ma sembra che sia stato rimosso. Ho avuto la fortuna di averlo mostrato mentre ero a Dockercon 2016. Sembra che Docker stia cercando di astrarre completamente la VM dall'esperienza, il che spiega perché non è più documentata.


3
Questa dovrebbe essere la risposta recentemente accettata per le persone che utilizzano i nuovi RC senza la docker-machine intermittente
Blizz

2

La soluzione attuale per osx time drift on docker (aprile 2018):

Ho il mio Mac su un server NTP, ma questo orologio fisso varia con i contenitori:

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

Se il tuo sistema non ha accesso a un server NTP, dopo un ibernazione il tempo visto da Docker per Mac potrebbe essere notevolmente fuori sincrono con l'host. Inoltre, il tempo potrebbe scivolare lentamente fuori sincronia durante l'uso. Per ripristinare manualmente l'ora dopo l'ibernazione, eseguire:

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

In alternativa, per risolvere entrambi i problemi, è possibile aggiungere l'orologio locale come origine dell'ora NTP di riserva a bassa priorità (strato alto) per l'host. Per fare ciò, modifica il file /etc/ntp-restrict.conf dell'host per aggiungere:

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

Quindi riavvia il servizio NTP con:

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

1

utilizzo di docker-compose:

Aggiungi /etc/localtime:/etc/localtime:roavolumes attributo.

Guarda questo link per dimostrare un esempio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.