Я создаю простой докер на основе Debian (php:7-apache
). Для его создания я использую:
docker run -d -p 80:80 --name myname -v "$PWD":/var/www/html php:7-apache
Я заметил, что мой докер, возможно, страдает от этот проблема, поэтому теперь каждый раз, когда я запускаю контейнер, я также запускаю:
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)
Это устранило мою проблему. Часы теперь в порядке. Однако, прежде чем попробовать это, я просто попытался установить ntp на докере и настроить его:
# 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!!!
Итак, почему не работает ntp? Я бы предположил, что лучше заставить NTP работать, чтобы в случае дрейфа они исправлялись автоматически, вместо того, чтобы вручную устанавливать часы из моей хост-системы.
Спасибо
РЕДАКТИРОВАТЬ: вторая попытка
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`"
Дает мне:
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
Итак, несмотря на попытку установить время вручную с помощью ntpd (ntpdate устарел согласно http://doc.ntp.org/4.1.0/ntpd.htm) и понимаете, что я отстаю на 14 секунд, контейнер не получает установленное время. Есть идеи по поводу моей ошибки? Приведенный выше сценарий запускается с docker exec
(с или без --privilege не имеет значения).
Полный выход ntpd -qxg
как следует:
13 Apr 12:52:43 ntpd[922]: ntpd 4.2.8p10@1.3728-o 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: найдено решение!
Решение следует. Ответ @kubanczyk правильный, но в специфике Docker нам нужно усилить ручное обновление времени:
# apt-get install ntp
# nsenter -t 1 -m -u -n -i ntpd -qxg
# /etc/init.d/ntp start
В ntpq
смещение в миллисекундах, например offset -117291
означает разницу примерно в 117 секунд.
Соединение UDP правильное. В противном случае вы бы не получили компенсацию.
В ntpd
консервативно отказывается устанавливать часы. Как правило, это работает только за счет небольшого замедления / ускорения часов. (И когда смещение по времени больше 1000 секунд, он полностью игнорирует источник).
Вы должны остановить ntpd
и беги ntpdate
установить часы. Теперь начнем ntpd
резервное копирование. Смещение будет меньше, поэтому синхронизация будет выполняться намного быстрее. Время точно синхронизировано, когда ntpq
отображает *
как это:
# 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