Docker kapsayıcısı, ana makine ile otomatik senkronizasyon zamanı mı?


108

Docker container zaman dilimini zaten doğru şekilde değiştirdim. Saati periyodik olarak senkronize etmek için docker konteynerinin içine bir NTP sunucusu kurmam gerekir mi, yoksa konteyner zamanı ana makinesinden senkronize eder mi?

Yanıtlar:


103

Boot2docker çalıştıran OSX kullanıyorsanız, şu soruna bakın: https://github.com/boot2docker/boot2docker/issues/290

İşletim sisteminiz uyurken boot2docker ana bilgisayarının zaman kayması olduğundan, zaman senkronizasyonu bir sorun haline gelir. Docker kapsayıcınızla zaman senkronizasyonu, kapsayıcınız ile çalıştırılarak çözülemez.-v /etc/localtime:/etc/localtime:ro

Bunun yerine, şimdilik, bunu OSX'te periyodik olarak çalıştırmanız gerekiyor:

/usr/local/bin/boot2docker ssh sudo ntpclient -s -h pool.ntp.org

Kitematic kullanıcıları için güncelleme

Eğer çalışıyorsa Kitematic şimdi kalkıp OSX içinde Docker çalışan için önerilen mekanizma, periyodik olarak bu komutu çalıştırmak gerekir:

docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'

Veya docker'ın eski sürümleri için

docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'

OSX için yeni yerel Docker kullanıcıları için güncelleme

Yeni Docker Beta, VirtualBox ve Docker Machine'i ortadan kaldırıyor. Docker'ın en son derlemeleri (şu anda 1.12.1-beta25 (derleme: 11807)), bir zaman kesintisi olduğunda bunu algılama ve buna göre ayarlama yeteneğine sahip görünüyor. Bu nedenle, bu artık bir sorun olmamalı ... yaşasın !!


Teşekkür ederim, nazik efendim!
seanmcl

Çok teşekkür ederim. Bu işe yarayan tek şeydi.
Mark Bao

1
Sözde düzeltmeye / azaltmaya bakın: github.com/boot2docker/boot2docker/pull/661
Max Gasner

7
Docker for OSX Beta için, kapsayıcıyı yeniden başlatmanın beni işe yaramadığını ve yeniden oluşturmanın da işe yaramadığını unutmayın. Bunun yerine, Docker'ı yeniden başlatmam gerekti (menü çubuğu simgesinden).
Pol

Her 5 dakikada bir docker-machine sanal makinelerinde zamanı senkronize etmek için bu yanıta dayalı bir CLI aracı yazdım . OSX El Capitan ve Windows 7
Pro'mda çalışıyor

50

https://github.com/sameersbn/docker-gitlab/issues/77

Sameersbn'nin cevabını görün.

option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"

2
Seçenek 2 benim için çalıştı. Aslında bunun diğer seçeneklerden daha açık olmasını seviyorum.
Ryan Walls

Teşekkürler 2. seçenek de benim için çalıştı. Etc / localtime klasörüm olmadığı için Mac'imde 1. seçenek ile hata alıyorum.
Zergleb

46

En basit çözüm, kapsayıcınızı -v /etc/localtime:/etc/localtime:roseçenekle çalıştırmak gibi görünüyor . Böylece:

#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

25
Asıl sorunun daha çok saat dilimleriyle mi (ör. Kapsayıcının DST ve saat dilimi değişikliklerini karşılayacağından emin olmak) veya doğru zaman tutmayla (ör. Kap saatinin kaymayacağından emin olmak) ile ilgili olup olmadığını bilmiyorum. Saat dilimleriyle ilgiliyse, bu cevap mükemmel. Saat kayması ile ilgiliyse endişelenmenize gerek yok: kabın saati, ana bilgisayarın saatiyle aynıdır (kabın --privilegedmodda çalışması dışında onu değiştirememesi dışında ).
jpetazzo

@jpetazzo kabul etti; dateMWE'mdeki ana makineye bir çağrı eklemeliydim , aksi takdirde konteynerin zamanını ana bilgisayardan alacağı belirsiz olabilir.
shabbychef

1
setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
Brian Tingle

Bu, OSX'te docker 1.3 başına çalışmıyor gibi görünüyor. Brian Tingle ile aynı hata.
esilver

1
@esilver boot2docker varsayılan olarak / Users altında yalnızca alt dizinleri bağlayabilir
menghan

27

Mac OS X Beta için Docker'da, Alpine Linux tabanlı sanal makinede önemli bir sapma yaşadım. Gönderen Alp Linux SSS aşağıdaki komutla VM'ın saatini senkronize edebilirsiniz.

ntpd -d -q -n -p pool.ntp.org

Ancak, sanal makinedeki bir terminale erişim sağlamak, ekran komutunu kullanırsanız yapılabilecek başka bir sorudur.

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

Bu yol, sistemimde işaret eden bir sembolik bağlantıdır /dev/ttys003.

Eğer notta aldıktan sonra o moby loginbasitçe roothiçbir şifre ile. Bitirdikten sonra, CTRL-A, D ekran oturumundan ayrılacaktır.

NOT: Bu , önceden Mac için Docker Sorun Giderme'de belgeleniyordu, ancak kaldırılmış gibi görünüyor. Dockercon 2016'da bunu gösterecek kadar şanslıydım. Görünüşe göre Docker sanal makineyi deneyimden tamamen soyutlamaya çalışıyor, bu da neden artık belgelenmediğini açıklıyor.


3
Bu aralıklı liman işçisi-makine olmadan yeni RCS kullanan kişiler için Yeni kabul edilen cevap olmalıdır
Blizz

2

Docker'da osx zaman kayması için mevcut çözüm (Nisan 2018):

Mac'im bir NTP sunucusunda var, ancak bu sabit saat kapsayıcılarla kayıyor:

Gönderen https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :

Sisteminizin bir NTP sunucusuna erişimi yoksa, bir hazırda bekletme modundan sonra Mac için Docker tarafından görülen süre, ana bilgisayarla önemli ölçüde senkronize olmayabilir. Ayrıca, kullanım sırasında zaman senkronizasyondan yavaşça kayabilir. Hazırda bekletme modundan sonraki süreyi manuel olarak sıfırlamak için şunu çalıştırın:

docker run --rm --privileged alpine hwclock -s

Veya, her iki sorunu da çözmek için, yerel saati ana bilgisayar için düşük öncelikli (yüksek katman) bir geri dönüş NTP zaman kaynağı olarak ekleyebilirsiniz. Bunu yapmak için, eklemek üzere ana bilgisayarın /etc/ntp-restrict.conf dosyasını düzenleyin:

server 127.127.1.1              # LCL, local clock
fudge  127.127.1.1 stratum 12   # increase stratum

Ardından NTP hizmetini şu şekilde yeniden başlatın:

sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.