Câu trả lời:
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 !!
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"
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:ro
tù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
--privileged
chế độ).
date
má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ủ.
setup mount namespace mounting /etc/localtime into /mnt/sda1/var/lib/docker/aufs/mnt/.../etc/localtime not a directory
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 login
nó chỉ đơn giản là root
khô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.
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
Thêm /etc/localtime:/etc/localtime:ro
vào volumes
thuộc tính.
Nhìn vào liên kết này để minh họa một ví dụ.