Tempo incorreto no contêiner do Docker debian apesar do NTP

1

Estou criando uma janela de encaixe simples baseada no debian ( php:7-apache ). Para criá-lo eu uso:

docker run -d -p 80:80 --name myname -v "$PWD":/var/www/html php:7-apache

Percebi que minha janela de encaixe possivelmente está sofrendo de isso problema, portanto, agora, toda vez que eu executar o contêiner, também corro:

docker run -it --rm --privileged --pid=host php:7-apache nsenter -t 1 -m -u -n -i date -u $(date -u +%m%d%H%M%Y)

Isso corrigiu meu problema. O relógio está ok agora. No entanto, antes de tentar isso, eu simplesmente tentei instalar o ntp na janela de encaixe e configurá-lo:

# apt-get install ntp
# vi /etc/ntp.conf # commented pools and added these servers http://www.pool.ntp.org/zone/europe
# /etc/init.d/ntp start
# /usr/bin/ntpq -p    
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
v.bsod.fr       193.190.230.66   2 u   24   64    1   32.924  -117284   0.004
tomia.ordimatic 62.210.36.58     3 u   23   64    1   26.158  -117286   0.004
pacifica.ufp.ne 162.23.41.10     2 u   25   64    1   27.922  -117281   0.004
aquila.init7.ne 189.247.1.117    2 u   24   64    1   34.736  -117291   0.004

# date
...WRONG DATE!!!

Então, por que o ntp não está funcionando? Eu diria que é melhor fazer com que o NTP funcione, de modo que, se ocorrerem desvios, eles estarão corretos automaticamente, em vez de serem configurados manualmente quando o relógio do meu sistema host.

Obrigado

EDITAR: segunda tentativa

apt-get install ntp 

# setting time
sed 's/pool /#pool /g' /etc/ntp.conf > /tmp/ntp.conf.tmp
echo "server 0.europe.pool.ntp.org" >> /tmp/ntp.conf.tmp
echo "server 1.europe.pool.ntp.org" >> /tmp/ntp.conf.tmp
echo "server 2.europe.pool.ntp.org" >> /tmp/ntp.conf.tmp
echo "server 3.europe.pool.ntp.org" >> /tmp/ntp.conf.tmp
mv /tmp/ntp.conf.tmp /etc/ntp.conf
ntpd -qxg | grep "ntpd:"
/etc/init.d/ntp start
echo "Date on ws container: 'date' - correct: '(curl time.correct.com?iso)2>/dev/null'"

Me dá:

13 Apr 11:40:47 ntpd[922]: ntpd: time slew +14.502687 s
ntpd: time slew +14.502687s
[ ok ] Starting NTP server: ntpd.
Date on ws container: Fri Apr 13 11:40:47 UTC 2018 - correct: 2018-04-13T11:41:02Z

Portanto, apesar de tentar definir a hora manualmente com o ntpd (o ntpdate está obsoleto de acordo com o link ) e fazendo com que eu fique 14 segundos atras, o container não tem tempo definido. Alguma ideia do meu erro? O script acima é executado com um docker exec (com ou sem --privilege não faz diferença).

A saída completa de ntpd -qxg é a seguinte:

13 Apr 12:52:43 ntpd[922]: ntpd [email protected] Sun Feb 25 21:22:55 UTC 2018 (1): Starting
13 Apr 12:52:43 ntpd[922]: Command line: ntpd -qxg
13 Apr 12:52:43 ntpd[922]: proto: precision = 3.398 usec (-18)
13 Apr 12:52:43 ntpd[922]: Listen and drop on 0 v6wildcard [::]:123
13 Apr 12:52:43 ntpd[922]: Listen and drop on 1 v4wildcard 0.0.0.0:123
13 Apr 12:52:43 ntpd[922]: Listen normally on 2 lo 127.0.0.1:123
13 Apr 12:52:43 ntpd[922]: Listen normally on 3 eth0 172.17.0.3:123
13 Apr 12:52:43 ntpd[922]: Listening on routing socket on fd #21 for interface updates
13 Apr 12:52:50 ntpd[922]: ntpd: time slew -2.923397 s
ntpd: time slew -2.923397s

EDIT2: Solução encontrada!

A solução segue. A resposta de @kubanczyk está correta, mas nas especificidades do Docker, precisamos melhorar a atualização de tempo manual:

# apt-get install ntp
# nsenter -t 1 -m -u -n -i ntpd -qxg
# /etc/init.d/ntp start
    
por JoeSlav 13.04.2018 / 12:07

1 resposta

3

O ntpq offset está em milissegundos, por exemplo, offset -117291 é convertido para cerca de 117 segundos de diferença.

A conectividade UDP está correta. Se não fosse, você não teria um deslocamento.

O ntpd conservadoramente se recusa a acertar o relógio. Geralmente, só funciona diminuindo / acelerando ligeiramente o relógio. (E quando o deslocamento de tempo é maior que 1000 segundos, ele ignora completamente a fonte).

Você precisa parar ntpd e executar ntpdate para definir seu relógio. Agora inicie ntpd de volta. O deslocamento seria menor, então ele será sincronizado muito mais rápido. A hora é precisamente sincronizada quando ntpq exibe * assim:

# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.0.21.44      10.0.21.1        6 u  370 1024  377    1.570   -0.926   6.177
+10.0.21.46      10.0.21.1        6 u  246 1024  377    2.616    2.904   6.750
-10.0.21.45      192.168.1.1      6 u  391 1024  377    1.620   13.230   9.495
+10.0.21.47      192.168.1.1      6 u  327 1024  377    2.463    2.994  11.56
-10.0.192.50     10.0.21.44       7 u  213 1024  377    0.357   -5.926  11.969
    
por 13.04.2018 / 12:46

Tags