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