นักเทียบท่าคอนเทนเนอร์จะซิงค์เวลาอัตโนมัติกับเครื่องโฮสต์หรือไม่


108

ให้ฉันเปลี่ยนเขตเวลาของคอนเทนเนอร์นักเทียบท่าอย่างถูกต้องแล้ว ฉันจำเป็นต้องติดตั้งเซิร์ฟเวอร์ NTP ภายในคอนเทนเนอร์นักเทียบท่าเพื่อซิงค์เวลาเป็นระยะหรือคอนเทนเนอร์จะซิงค์เวลาจากเครื่องโฮสต์หรือไม่

คำตอบ:


103

หากคุณใช้ 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 Beta ใหม่ใช้กับ VirtualBox และ Docker Machine นักเทียบท่ารุ่นล่าสุด (ปัจจุบันคือ 1.12.1-beta25 (บิลด์: 11807)) ดูเหมือนว่าจะมีความสามารถในการตรวจจับเมื่อเวลาไม่ต่อเนื่องและปรับเปลี่ยนตามนั้น ดังนั้นเรื่องนี้ไม่ควรเป็นปัญหาอีกต่อไป ... ไชโย !!


ขอบคุณครับท่านผู้ใจดี!
seanmcl

ขอบคุณมาก. นี่เป็นสิ่งเดียวที่ใช้ได้ผล
Mark Bao

1
ดูการแก้ไข / บรรเทาที่อ้างว่า: github.com/boot2docker/boot2docker/pull/661
Max Gasner

7
โปรดทราบว่าสำหรับ Docker สำหรับ OSX Beta การรีสตาร์ทคอนเทนเนอร์ไม่ได้ผลสำหรับฉันและก็ไม่ได้สร้างขึ้นใหม่ แต่ฉันต้องรีสตาร์ท Docker เอง (จากไอคอนเมนู)
Pol

ฉันเขียนเครื่องมือ CLIตามคำตอบนี้เพื่อซิงโครไนซ์เวลาบน VM ของเครื่องเทียบท่าทุก 5 นาที ทำงานบน OSX El Capitan และ Windows 7 Pro ของฉัน
dadads

50

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

ดูคำตอบของ sameersbn

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

2
ตัวเลือกที่ 2 ใช้ได้ผลสำหรับฉัน ที่จริงฉันชอบที่ชัดเจนกว่าตัวเลือกอื่น ๆ
Ryan Walls

ขอบคุณตัวเลือก 2 ที่ใช้ได้ผลสำหรับฉัน ฉันได้รับข้อผิดพลาดบน Mac ของฉันพร้อมตัวเลือกที่ 1 เนื่องจากฉันไม่มีโฟลเดอร์ etc / localtime
Zergleb

46

ทางออกที่ง่ายที่สุดคือการเรียกใช้คอนเทนเนอร์ของคุณด้วย-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

25
ฉันไม่รู้ว่าคำถามเดิมเกี่ยวกับเขตเวลามากกว่า (เช่นตรวจสอบให้แน่ใจว่าคอนเทนเนอร์นั้นรองรับการเปลี่ยนแปลง DST และเขตเวลา) หรือการรักษาเวลาที่แม่นยำ (เช่นตรวจสอบให้แน่ใจว่านาฬิกาคอนเทนเนอร์จะไม่ลอย) หากเป็นเรื่องของเขตเวลาคำตอบนั้นสมบูรณ์แบบ หากเป็นเรื่องของการหมุนของนาฬิกาคุณไม่ต้องกังวล: นาฬิกาของคอนเทนเนอร์จะเหมือนกับนาฬิกาของโฮสต์ (ยกเว้นว่าคอนเทนเนอร์ไม่สามารถเปลี่ยนแปลงได้ยกเว้นเมื่อทำงานใน--privilegedโหมด)
jpetazzo

@jpetazzo เห็นด้วย; ฉันควรรวมการโทรไปยังdateเครื่องโฮสต์ใน MWE ของฉันเนื่องจากอาจไม่ชัดเจนว่าคอนเทนเนอร์ได้รับเวลาจากโฮสต์
shabbychef

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

ดูเหมือนว่าจะไม่ทำงานต่อนักเทียบท่า 1.3 บน OSX ข้อผิดพลาดเดียวกับ Brian Tingle
esilver

1
@esilver boot2docker สามารถเมานต์ไดเร็กทอรีย่อยภายใต้ / Users โดยค่าเริ่มต้น
menghan

27

บน Docker สำหรับ Mac OS X Beta ฉันพบกับการล่องลอยอย่างมีนัยสำคัญบน VM ซึ่งใช้ Alpine Linux จากคำถามที่พบบ่อยของ 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

ว่าเส้นทางเป็น symlink /dev/ttys003ซึ่งในจุดที่ระบบของฉัน

เมื่อคุณได้รับในทราบว่าmoby loginเป็นเพียงrootด้วยรหัสผ่านใด ๆ หลังจากเสร็จสิ้น CTRL-A, D จะตัดการเชื่อมต่อจากเซสชันหน้าจอ

หมายเหตุ:สิ่งนี้เคยถูกบันทึกไว้ในDocker for Mac Trouble Shootingแต่ดูเหมือนว่าจะถูกลบไปแล้ว ฉันโชคดีพอที่จะแสดงให้เห็นในขณะที่ Dockercon 2016 ดูเหมือนว่า Docker กำลังพยายามทำให้ VM ออกจากประสบการณ์โดยสิ้นเชิงซึ่งอธิบายว่าเหตุใดจึงไม่ได้รับการจัดทำเป็นเอกสารอีกต่อไป


3
นี่น่าจะเป็นคำตอบใหม่ที่ได้รับการยอมรับสำหรับผู้ที่ใช้ RC ใหม่โดยไม่ต้องใช้ Docker-machine เป็นระยะ
Blizz

2

โซลูชันปัจจุบันสำหรับ osx time drift on docker (เมษายน 2018):

ฉันมี Mac ของฉันบนเซิร์ฟเวอร์ NTP แต่นาฬิกาคงที่นี้ล่องลอยไปพร้อมกับคอนเทนเนอร์:

จากhttps://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :

หากระบบของคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ NTP หลังจากไฮเบอร์เนตเวลาที่ Docker for 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

1

การใช้งานนักเทียบท่าเขียน:

เพิ่ม/etc/localtime:/etc/localtime:roในvolumesแอตทริบิวต์

ดูที่ลิงค์นี้เพื่อสาธิตตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.