Bộ chứa docker có tự động đồng bộ thời gian với máy chủ không?


108

Đưa ra Tôi đã thay đổi chính xác múi giờ của vùng chứa docker. Tôi có cần cài đặt máy chủ NTP bên trong vùng chứa docker để đồng bộ hóa thời gian theo định kỳ hay vùng chứa sẽ đồng bộ hóa thời gian từ máy chủ của nó?

Câu trả lời:


103

Nếu bạn đang sử dụng OSX đang chạy boot2docker, hãy xem sự cố này: https://github.com/boot2docker/boot2docker/issues/290

Đồng bộ thời gian trở thành một vấn đề vì máy chủ boot2docker có thời gian trôi trong khi hệ điều hành của bạn ở chế độ ngủ. Không thể giải quyết đồng bộ thời gian với vùng chứa docker của bạn bằng cách chạy vùng chứa của bạn với-v /etc/localtime:/etc/localtime:ro

Thay vào đó, hiện tại, bạn phải chạy định kỳ điều này trên OSX:

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

Cập nhật cho người dùng Kitematic

Nếu bạn đang chạy Kitematic , hiện là cơ chế được đề xuất để thiết lập và chạy trên Docker trong OSX, bạn sẽ phải chạy lệnh này theo định kỳ:

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

Hoặc, đối với các phiên bản cũ hơn của docker

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

Cập nhật cho người dùng Docker gốc mới cho OSX

Docker Beta mới loại bỏ VirtualBox và Docker Machine. Các bản dựng mới nhất của docker (hiện tại, 1.12.1-beta25 (bản dựng: 11807)) dường như có khả năng phát hiện khi có thời gian gián đoạn và điều chỉnh cho phù hợp. Vì vậy, đây sẽ không còn là một vấn đề ... hooray !!


Cảm ơn bạn, tốt bụng!
seanmcl

Cảm ơn bạn rất nhiều. Đây là điều duy nhất hoạt động.
Mark Bao

1
Xem việc sửa chữa có mục đích xấu / giảm nhẹ: github.com/boot2docker/boot2docker/pull/661
Max Gasner

7
Lưu ý rằng đối với Docker cho OSX Beta, việc khởi động lại vùng chứa không hoạt động với tôi và cũng không tạo lại nó. Thay vào đó, tôi phải khởi động lại chính Docker (từ biểu tượng thanh menu).
Pol

Tôi đã viết một công cụ CLI dựa trên câu trả lời này để đồng bộ hóa thời gian trên máy ảo docker-máy cứ 5 phút một lần. Hoạt động trên OSX El Capitan và Windows 7 Pro của tôi
bố làm việc vào 20/09/2016

50

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

Xem câu trả lời của sameersbn.

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

2
Tùy chọn 2 đã làm việc cho tôi. Tôi thực sự thích điều đó là rõ ràng hơn các tùy chọn khác.
Ryan Walls

Cảm ơn bạn tùy chọn 2 cũng làm việc cho tôi. Tôi gặp lỗi trên máy Mac của mình với tùy chọn 1 vì tôi không có thư mục etc / localtime.
Zergleb

46

Giải pháp đơn giản nhất dường như là chạy vùng chứa của bạn với -v /etc/localtime:/etc/localtime:rotùy chọn. Như vậy:

#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
Tôi không biết liệu câu hỏi ban đầu là về múi giờ (ví dụ: đảm bảo rằng vùng chứa sẽ tuân theo các thay đổi về DST và múi giờ) hay việc giữ thời gian chính xác (ví dụ: đảm bảo rằng đồng hồ của vùng chứa sẽ không bị trôi). Nếu đó là về múi giờ, câu trả lời đó là hoàn hảo. Nếu đó là về độ trôi của đồng hồ, bạn không phải lo lắng: đồng hồ của vùng chứa giống với đồng hồ của máy chủ (ngoại trừ vùng chứa không thể thay đổi nó, ngoại trừ khi nó đang chạy ở --privilegedchế độ).
jpetazzo

@jpetazzo đồng ý; Tôi lẽ ra phải bao gồm một cuộc gọi đến datemáy chủ trong MWE của mình, vì có lẽ không rõ rằng vùng chứa lấy thời gian từ máy chủ.
shabbychef

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

Điều này dường như không hoạt động trên mỗi docker 1.3 trên OSX. Lỗi tương tự như Brian Tingle.
esilver

1
@esilver boot2docker chỉ có thể gắn kết các thư mục con dưới / Users theo mặc định
menghan

27

Trên Docker dành cho Mac OS X Beta, tôi đã gặp phải sự thay đổi đáng kể trên máy ảo dựa trên Alpine Linux. Từ Alpine Linux FAQ, bạn có thể đồng bộ hóa đồng hồ của VM bằng lệnh sau.

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

Tuy nhiên, việc truy cập vào một thiết bị đầu cuối trên máy ảo là một câu hỏi khác, có thể thực hiện được nếu bạn sử dụng lệnh màn hình.

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

Đường dẫn đó là một liên kết tượng trưng, ​​trên hệ thống của tôi trỏ đến /dev/ttys003.

Khi bạn vào được, hãy lưu ý rằng moby loginnó chỉ đơn giản là rootkhông có mật khẩu. Sau khi bạn hoàn thành, CTRL-A, D sẽ ngắt kết nối khỏi phiên màn hình.

LƯU Ý: Điều này từng được ghi lại trên Docker for Mac Trouble Shooting nhưng điều đó dường như đã bị gỡ xuống. Tôi đã may mắn được cho xem nó khi ở Dockercon 2016. Có vẻ như Docker đang cố gắng trừu tượng hóa hoàn toàn VM ra khỏi trải nghiệm, điều này giải thích tại sao nó không còn được ghi lại.


3
Điều này sẽ là câu trả lời mới được chấp nhận cho những người sử dụng RCS mới mà không có sự gián đoạn Docker máy
Blizz

2

Giải pháp hiện tại cho thời gian trôi dạt osx trên docker (tháng 4 năm 2018):

Tôi có máy Mac của mình trên máy chủ NTP, nhưng đồng hồ cố định này trôi dạt với các vùng chứa:

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

Nếu hệ thống của bạn không có quyền truy cập vào máy chủ NTP, thì sau thời gian ngủ đông mà Docker cho Mac thấy có thể không đồng bộ đáng kể với máy chủ. Hơn nữa, thời gian có thể từ từ không đồng bộ trong quá trình sử dụng. Để đặt lại thủ công thời gian sau khi ngủ đông, hãy chạy:

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

Hoặc, để giải quyết cả hai vấn đề, bạn có thể thêm đồng hồ cục bộ làm nguồn thời gian NTP dự phòng có mức ưu tiên thấp (tầng cao) cho máy chủ. Để thực hiện việc này, hãy chỉnh sửa /etc/ntp-restrict.conf của máy chủ để thêm:

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

Sau đó khởi động lại dịch vụ NTP với:

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

1

cách sử dụng docker-soạn:

Thêm /etc/localtime:/etc/localtime:rovào volumesthuộc tính.

Nhìn vào liên kết này để minh họa một ví dụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.