web-dev-qa-db-ja.com

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

与えて私は既にdocker containerのタイムゾーンを正しく変更しました。 Dockerコンテナー内にNTPサーバーをインストールして定期的に時刻を同期する必要がありますか、またはコンテナーがホストマシンから時刻を同期する必要がありますか?

99
vantt

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

OSがスリープしている間にboot2dockerホストに時間ドリフトがあるため、時間同期が問題になります。 Dockerコンテナとの時間同期は、-v /etc/localtime:/etc/localtime:roでコンテナを実行しても解決できません

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

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

Kitematicのユーザー向けの更新

OSXでDockerを起動して実行するための推奨メカニズムである Kitematic を実行している場合、このコマンドを定期的に実行する必要があります。

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))は、時間の不連続があったことを検出し、それに応じて調整する機能があるようです。したがって、これはもはや問題ではないはずです...

102
esilver

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

Sameersbnの回答を参照してください。

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

最も簡単な解決策は、-v /etc/localtime:/etc/localtime:roオプションを使用してコンテナを実行することです。副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example:

#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
45
shabbychef

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を経験から完全に抽象化しようとしているようです。

24

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

私はNTPサーバー上にMacを持っていますが、コンテナーでこの固定クロックドリフトが発生します。

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
2
Steve Kallestad

docker-composeの使用法:

/etc/localtime:/etc/localtime:rovolumes属性に追加します。

これを見て link 例を示してください。

1
Benyamin Jafari