Akankah penampung buruh pelabuhan otomatis menyinkronkan waktu dengan mesin host?

108

Memberi saya sudah mengubah zona waktu kontainer buruh pelabuhan dengan benar. Apakah saya perlu memasang server NTP di dalam penampung buruh pelabuhan untuk menyinkronkan waktu secara berkala atau penampung akan menyinkronkan waktu dari mesin inangnya?

vantt
sumber

Jawaban:

103

Jika Anda menggunakan OSX menjalankan boot2docker, lihat masalah ini: https://github.com/boot2docker/boot2docker/issues/290

Sinkronisasi waktu menjadi masalah karena host boot2docker memiliki time drift-nya saat OS Anda tertidur. Sinkronisasi waktu dengan penampung buruh pelabuhan Anda tidak dapat diselesaikan dengan menjalankan penampung Anda dengan-v /etc/localtime:/etc/localtime:ro

Sebagai gantinya, untuk saat ini, Anda harus menjalankan ini secara berkala di OSX:

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

Pembaruan untuk pengguna Kitematic

Jika Anda menjalankan Kitematic , yang sekarang merupakan mekanisme yang disarankan untuk bangun dan berjalan di Docker di OSX, Anda harus menjalankan perintah ini secara berkala:

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

Atau, untuk buruh pelabuhan versi lama

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

Pembaruan untuk pengguna Docker asli baru untuk OSX

Docker Beta baru menghilangkan VirtualBox dan Mesin Docker. Build terbaru dari buruh pelabuhan (saat ini, 1.12.1-beta25 (build: 11807)) tampaknya memiliki kemampuan untuk mendeteksi ketika ada penghentian waktu dan menyesuaikannya. Jadi, ini seharusnya tidak lagi menjadi masalah ... hore !!

esilver
sumber
Terima kasih, tuan yang baik!
seanmcl
Terima kasih banyak. Ini adalah satu-satunya hal yang berhasil.
Mark Bao
1
Lihat perbaikan / mitigasi yang diklaim
Max Gasner
7
Perhatikan bahwa untuk Docker untuk OSX Beta, memulai ulang container tidak berhasil bagi saya, dan juga tidak membuatnya kembali. Sebagai gantinya, saya harus me-restart Docker itu sendiri (dari ikon menubar).
Pol
Saya menulis alat CLI berdasarkan jawaban ini untuk menyinkronkan waktu pada VM docker-machine setiap 5 menit. Berfungsi pada OSX El Capitan dan Windows 7 Pro saya
ayah
50

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

Lihat jawaban sameersbn.

option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"
pengguna3908675
sumber
2
Opsi 2 berhasil untuk saya. Saya sebenarnya suka yang lebih eksplisit daripada opsi lainnya.
Ryan Walls
Terima kasih opsi 2 juga berhasil untuk saya. Saya mendapatkan kesalahan pada Mac saya dengan opsi 1 karena saya tidak memiliki folder etc / localtime.
Zergleb
46

Solusi paling sederhana tampaknya menjalankan penampung Anda dengan -v /etc/localtime:/etc/localtime:roopsi. Jadi:

#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
shabbychef
sumber
25
Saya tidak tahu apakah pertanyaan awal lebih banyak tentang zona waktu (misalnya, memastikan bahwa penampung akan mengikuti perubahan DST dan zona waktu) atau pencatatan waktu yang akurat (misalnya, memastikan bahwa jam penampung tidak akan melayang). Jika ini tentang zona waktu, jawaban itu sempurna. Jika ini tentang penyimpangan jam, Anda tidak perlu khawatir: jam penampung sama dengan jam host (kecuali penampung tidak dapat mengubahnya, kecuali saat berjalan dalam --privilegedmode).
jpetazzo
@jpeta setuju; Saya seharusnya menyertakan panggilan ke datepada mesin host di MWE saya, karena jika tidak, mungkin tidak jelas apakah container mendapatkan waktunya dari host.
shabbychef
1
setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
Brian Tingle
Ini tampaknya tidak bekerja untuk setiap buruh pelabuhan 1.3 di OSX. Kesalahan yang sama seperti Brian Tingle.
esilver
1
@esilver boot2docker hanya dapat me-mount subdirektori di bawah / Users by default
menghan
27

Di Docker untuk Mac OS X Beta, saya mengalami pergeseran yang signifikan pada VM, yang didasarkan pada Alpine Linux. Dari Alpine Linux FAQ Anda dapat menyinkronkan jam VM dengan perintah berikut.

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

Namun, mendapatkan akses ke terminal di VM adalah pertanyaan lain, yang dapat dilakukan jika Anda menggunakan perintah layar.

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

Path itu adalah symlink, yang di tunjuk oleh sistem saya /dev/ttys003.

Setelah Anda masuk, perhatikan bahwa moby loginis hanya roottanpa kata sandi. Setelah Anda selesai, CTRL-A, D akan memutuskan sambungan dari sesi layar.

CATATAN: Ini dulu didokumentasikan di Docker untuk Mac Trouble Shooting tetapi tampaknya telah dihapus. Saya cukup beruntung untuk ditampilkan saat berada di Dockercon 2016. Tampaknya Docker sedang mencoba mengabstraksi VM sepenuhnya dari pengalaman, yang menjelaskan mengapa tidak lagi didokumentasikan.

Martin Woolstenhulme
sumber
3
Ini harus menjadi jawaban yang baru diterima untuk orang-orang yang menggunakan RC baru tanpa mesin galangan berselang
Blizz
2

Solusi saat ini untuk osx time drift on docker (April 2018):

Saya memiliki mac saya di server NTP, tetapi jam tetap ini melayang dengan kontainer:

Dari https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :

Jika sistem Anda tidak memiliki akses ke server NTP, maka setelah hibernasi, waktu yang dilihat oleh Docker untuk Mac mungkin tidak sinkron dengan host. Selain itu, waktu mungkin perlahan-lahan tidak sinkron selama digunakan. Untuk mengatur ulang waktu secara manual setelah hibernasi, jalankan:

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

Atau, untuk mengatasi kedua masalah tersebut, Anda dapat menambahkan jam lokal sebagai sumber waktu NTP fallback prioritas rendah (stratum tinggi) untuk host. Untuk melakukan ini, edit /etc/ntp-restrict.conf host untuk menambahkan:

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

Kemudian restart layanan NTP dengan:

sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Steve Kallestad
sumber
1

penggunaan buruh pelabuhan-menulis:

Tambahkan /etc/localtime:/etc/localtime:roke volumesatribut.

Lihat tautan ini untuk menunjukkan contoh.

Benyamin Jafari
sumber