ให้ฉันเปลี่ยนเขตเวลาของคอนเทนเนอร์นักเทียบท่าอย่างถูกต้องแล้ว ฉันจำเป็นต้องติดตั้งเซิร์ฟเวอร์ NTP ภายในคอนเทนเนอร์นักเทียบท่าเพื่อซิงค์เวลาเป็นระยะหรือคอนเทนเนอร์จะซิงค์เวลาจากเครื่องโฮสต์หรือไม่
ให้ฉันเปลี่ยนเขตเวลาของคอนเทนเนอร์นักเทียบท่าอย่างถูกต้องแล้ว ฉันจำเป็นต้องติดตั้งเซิร์ฟเวอร์ NTP ภายในคอนเทนเนอร์นักเทียบท่าเพื่อซิงค์เวลาเป็นระยะหรือคอนเทนเนอร์จะซิงค์เวลาจากเครื่องโฮสต์หรือไม่
คำตอบ:
หากคุณใช้ 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)) ดูเหมือนว่าจะมีความสามารถในการตรวจจับเมื่อเวลาไม่ต่อเนื่องและปรับเปลี่ยนตามนั้น ดังนั้นเรื่องนี้ไม่ควรเป็นปัญหาอีกต่อไป ... ไชโย !!
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 ฉันพบกับการล่องลอยอย่างมีนัยสำคัญบน 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 ออกจากประสบการณ์โดยสิ้นเชิงซึ่งอธิบายว่าเหตุใดจึงไม่ได้รับการจัดทำเป็นเอกสารอีกต่อไป
โซลูชันปัจจุบันสำหรับ 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
เพิ่ม/etc/localtime:/etc/localtime:ro
ในvolumes
แอตทริบิวต์
ดูที่ลิงค์นี้เพื่อสาธิตตัวอย่าง