LoginSignup
69
46

More than 5 years have passed since last update.

Docker for Mac上のコンテナ時刻がずれていく場合の対処法

Last updated at Posted at 2017-02-07

概要

 Docker for Macをサーバ用途などで1日以上起動したままにすると徐々にコンテナ内の時刻がずれてしまいます。
 検索しても自分の環境と条件が違うものが多かったので、Docker for Macでの同期についてやってみました。

環境

OS: Mac OS Sierra 10.12.3
Docker for Mac: 1.13.0

手順

1 ターミナルを開いて以下を実行する

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

2 空の端末が起動するので、次のコマンドを実行する

hwclock -s

これでコンテナ内の時刻がホストのmac OSの時刻と同期しているかと思います。

手順の内容

Docker for Macコンテナの階層

公式のDocker for Mac vs. Docker Toolboxには以下のように記載されています

Docker for Mac does not use VirtualBox, but rather HyperKit, a lightweight macOS virtualization solution built on top of Hypervisor.framework in macOS 10.10 Yosemite and higher.

 Docker for MacではMacの上にHyperKitという仮想化ソリューションを用いてAlpine Linuxベースの仮想環境を構築し、その上にDockerコンテナが乗ることになります。

時刻がずれる要因

 本来Dockerではホストの時刻を参照するため、時刻がずれることはないのですが、上記の通りHyperKit上の仮想OSがDockerコンテナにとってのホストとなり、そのホストの時刻がずれていくことで、コンテナ上の時刻もずれていきます。

HyperKit上の時刻をハードウェアクロックと同期させる

 手順1.で実行しているのは、HyperKit上のLinuxへのアクセスで、手順2.では、ハードウェアクロックをシステムクロックに同期させています。
 ハードウェアクロックは文字通りmacのハードで刻んでいるクロックで、ホストはNTPで適宜正しい時刻をハードウェアクロックに反映していますので、ハードウェアクロックをHyperKit上のLinuxに反映させることで、それを参照するコンテナの時刻同期を図っています。

(2017/05/28追記)
image.png

 HyperKit上のLinuxにはcronが入っていたので、

crontab -e

でスケジューリングしてやれば、定期的にハードウェアクロックと同期させることもできます。

参照

How to access the VM created by docker's HyperKit?
Docker for Mac vs. Docker Toolbox

69
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
46