Dockerコンテナはホストマシンと時刻を自動同期しますか?


108

すでにDockerコンテナのタイムゾーンを正しく変更しています。定期的に時刻を同期するためにDockerコンテナー内にNTPサーバーをインストールする必要がありますか、それともコンテナーがホストマシンから時刻を同期しますか?

回答:


103

boot2dockerを実行しているOSXを使用している場合は、この問題を参照してください:https : //github.com/boot2docker/boot2docker/issues/290

OSがスリープしている間、boot2dockerホストには時間のずれがあるため、時刻同期が問題になります。dockerコンテナーとの時刻同期は、コンテナーを-v /etc/localtime:/etc/localtime:ro

代わりに、今のところ、OSXで定期的に実行する必要があります。

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

Kitematicのユーザー向けの更新

あなたが実行している場合Kitematic今起床し、OSXにドッカー上で実行するための提案機構であり、あなたが定期的にこのコマンドを実行する必要があります。

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

または、古いバージョンのdockerの場合

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

OSX用の新しいネイティブDockerのユーザー向けの更新

新しいDocker Betaは、VirtualBoxとDocker Machineを廃止します。dockerの最新ビルド(現在、1.12.1-beta25(ビルド:11807))には、時間の不連続が発生したことを検出し、それに応じて調整する機能があるようです。したがって、これはもはや問題ではありません...


あなたの親切な先生に感謝!
seanmcl 2014年

どうもありがとうございます。これが機能した唯一のものでした。
Mark Ba​​o

1
意図された修正/緩和を参照してください:github.com/boot2docker/boot2docker/pull/661
Max

7
Docker for OSX Betaの場合、コンテナを再起動しても機能せず、再作成もできませんでした。代わりに、(メニューバーアイコンから)Docker自体を再起動する必要がありました。
2016年

この回答に基づいて、5分ごとにdocker-machine VMの時刻を同期するCLIツールを作成しました。私の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も私にとってはうまくいきました。etc / localtimeフォルダーがないため、Macでオプション1のエラーが発生します。
Zergleb、2015年

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 2014

@jpetazzoは同意した。dateコンテナーがホストから時間を取得していることが明確でない場合があるため、MWEのホストマシンへの呼び出しを含める必要がありました。
shabbychef 14

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

これはOSX上のdocker 1.3ごとに機能しないようです。ブライアンティングルと同じエラー。
esilver 2014年

1
@esilver boot2dockerは、デフォルトでは/ Usersの下のサブディレクトリのみをマウントできます
menghan

27

Mac OS Xベータ版のDockerでは、Alpine Linuxに基づくVMで大幅なドリフトが発生しました。Alpine Linux FAQから、次のコマンドでVMのクロックを同期できます。

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

ただし、VMのターミナルにアクセスすることは別の問題であり、screenコマンドを使用すると実行できます。

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

そのパスはシンボリックリンクであり、私のシステムではを指し/dev/ttys003ます。

いったん入ると、パスワードがないmoby loginだけrootであることに注意してください。終了すると、CTRL-A、Dがスクリーンセッションから切断されます。

注:これはDocker for Macのトラブルシューティングに記載されていましたが、削除されたようです。私は幸運にもDockercon 2016の間にそれを見せられました。DockerはエクスペリエンスからVMを完全に抽象化しようとしているようです。


3
これは断続的なdocker-machineなしで新しいRCを使用する人々のための新しく受け入れられた答えでなければなりません
Blizz

2

DockerのOSX時間ドリフトの現在のソリューション(2018年4月):

私の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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.