Ответы:
Если вы используете OSX и запускаете boot2docker, см. Эту проблему: https://github.com/boot2docker/boot2docker/issues/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 покончено с VirtualBox и Docker Machine. Последние сборки докера (в настоящее время 1.12.1-beta25 (сборка: 11807)), похоже, имеют возможность определять, когда произошел разрыв во времени, и соответствующим образом корректировать. Таким образом, это больше не должно быть проблемой ... ура !!
https://github.com/sameersbn/docker-gitlab/issues/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 я испытал значительный дрейф виртуальной машины, основанной на Alpine Linux. Из Alpine Linux FAQ вы можете синхронизировать часы виртуальной машины с помощью следующей команды.
ntpd -d -q -n -p pool.ntp.org
Однако получение доступа к терминалу на виртуальной машине - это еще один вопрос, который можно решить, если использовать команду screen.
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Этот путь является символической ссылкой, которая в моей системе указывает на /dev/ttys003
.
Как только вы войдете, обратите внимание, что у moby login
него просто root
нет пароля. После того, как вы закончите, CTRL-A, D отключится от сеанса экрана.
ПРИМЕЧАНИЕ. Раньше это документировалось в разделе «Устранение неполадок Docker для Mac», но, похоже, оно было удалено. Мне посчастливилось показать это на Dockercon 2016. Похоже, Docker пытается полностью исключить виртуальную машину из опыта, что объясняет, почему она больше не документирована.
Текущее решение для смещения времени osx на докере (апрель 2018 г.):
У меня есть Mac на сервере NTP, но этот фиксированный дрейф часов с контейнерами:
С https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :
Если ваша система не имеет доступа к серверу 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
атрибуту.
Посмотрите на эту ссылку, чтобы продемонстрировать пример.