Відповіді:
Якщо ви працюєте на OSX під керуванням boot2docker, перегляньте цю проблему: https://github.com/boot2docker/boot2docker/isissue/290
Синхронізація часу стає проблемою, оскільки хост boot2docker має час руху, поки ваша ОС спить. Час синхронізації з вашим контейнером докера не може бути вирішений, запустивши його-v /etc/localtime:/etc/localtime:ro
Натомість наразі вам доведеться періодично запускати це на OSX:
/usr/local/bin/boot2docker ssh sudo ntpclient -s -h pool.ntp.org
Оновлення для користувачів Kitematic
Якщо ви запускаєте Kitematic , який зараз є запропонованим механізмом для встановлення та запуску на Docker в OSX, вам доведеться періодично запускати цю команду:
docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'
Або для старих версій докера
docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'
Оновлення для користувачів нового нативного Docker для OSX
Нова Docker Beta не відповідає VirtualBox та Docker Machine. Останні версії докера (наразі, 1.12.1-beta25 (збірка: 11807)), здається, мають можливість виявляти, коли відбувся перерив часу, та коригувати відповідно. Таким чином, це більше не повинно бути проблемою ... ура!
https://github.com/sameersbn/docker-gitlab/isissue/77
Дивіться відповідь sameersbn.
option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"
Найпростішим рішенням є запуск контейнера з -v /etc/localtime:/etc/localtime:ro
опцією. Таким чином:
#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
--privileged
режимі).
date
на хост-машині у свій MWE, оскільки інакше можливо не зрозуміло, що контейнер отримує свій час від хоста.
setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
На Docker для Mac OS X Beta я відчув суттєвий дрейф VM, який базується на Alpine Linux. З питань FAQ Alpine Linux ви можете синхронізувати годинник VM за допомогою наступної команди.
ntpd -d -q -n -p pool.ntp.org
Однак отримати доступ до терміналу на VM - це ще одне питання, яке можна зробити, якщо використовувати екранну команду.
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Цей шлях - це симпосилання, яке в моїй системі вказує на /dev/ttys003
.
Як тільки ви заходите, зауважте, що moby login
це просто root
без пароля. Після закінчення CTRL-A, D відключиться від екранного сеансу.
ПРИМІТКА. Це раніше було задокументовано на Docker для Mac Trouble Shooting, але це, здається, було знято. Мені пощастило, щоб його показали під час Dockercon 2016. Схоже, Докер намагається повністю абстрагувати ВМ із досвіду, що пояснює, чому це більше не документально підтверджено.
Поточне рішення для дрейфу часу на OSX на докер (квітень 2018):
У мене є Mac на сервері NTP, але це фіксований дрейф годинника з контейнерами:
З https://docs.docker.com/docker-for-mac/troubleshoot/#known-isissue :
Якщо у вашій системі немає доступу до сервера NTP, то після сплячого часу час, який бачив Docker для Mac, може бути сильно синхронізований з хостом. Крім того, під час використання час може повільно витікати з синхронізації. Щоб вручну скинути час після сплячки, запустіть:
docker run --rm --privileged alpine hwclock -s
Або для вирішення обох проблем ви можете додати локальний годинник як джерело резервного часу NTP з низьким пріоритетом (високий прошарок) для хоста. Для цього відредагуйте /etc/ntp-restrict.conf хоста, щоб додати:
server 127.127.1.1 # LCL, local clock
fudge 127.127.1.1 stratum 12 # increase stratum
Потім перезапустіть службу NTP за допомогою:
sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Додати /etc/localtime:/etc/localtime:ro
в volumes
атрибут.
Подивіться на це посилання, щоб продемонструвати приклад.