12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CoreOSの自動アップデートでDocker環境が全滅した日

Last updated at Posted at 2017-11-10

はじめに

先日、CoreOSの自動アップデートによりDockerで動かしていた検証用の環境が全滅 :confounded:、という状況に遭遇したので原因と対応策を記しておきます。

環境

CoreOS 1576.2.0 (Beta channel)1

現象

2017/11/09 にDockerで動かしていたアプリケーションがまったく使えなくなる。ホストOSであるCoreOSは稼働しているが、docker psすると Cannot connect to the Docker daemon... のエラーメッセージが返ってくる。稼働プロセスを確認すると確かにDockerデーモンのプロセスがなく、手動で systemctl start docker しても起動しないという状況。

原因

journalctl -xeでログを確認すると一目瞭然。Dockerの起動でコケていた。

Nov 09 14:27:01 my-dockerhost docker[957]: `docker daemon` is not supported on Linux. Please run `dockerd` directly

https://docs.docker.com/engine/deprecated/#docker-daemon-subcommand にあるとおり、Docker v1.13.0で非推奨となり v17.12 で削除2 となるため、代わりに dockerdという別コマンドを使うように、とのこと。

確かに、アップデートされたCoreOSの1576.2.0 リリースノート も見てみると、Dockerのバージョンが 1.12.6 :arrow_right: 17.09.0 とついにv17系になっていた。念のためCoreOS上のDockerのバージョンを確認してみると...

$ docker --version
Docker version 17.09.0-ce, build afdb6d4

と確かにv17系になっている。

結論としては、Dockerのバージョンアップによりdocker daemonが使えなくなったのが原因と思われる。

対応策

正しくdockerdを使うようにDockerデーモンの起動方法を変えれば良い。CoreOSではsystemdを使って起動しているので docker.service を修正する。

/etc/systemd/system/docker.service
@@ -1 +1 @@
-ExecStart=/usr/bin/docker daemon --storage-driver=btrfs --host=fd:// $DOCKER_OPTS
+ExecStart=/usr/bin/dockerd --storage-driver=btrfs --host=fd:// $DOCKER_OPTS

後はsystemdのservice設定ファイルの変更を反映し、Dockerを起動して復旧完了。

sudo systemctl daemon-reload
sudo systemctl start docker

Dockerをダウングレードする手もある

この記事を書いている時に見つけたものですが、CoreOSのBlogに Toward Docker 17.xx in Container Linux というものが書かれていた3/etc/coreos/docker-1.12yesを書き込んでおくとダウングレードして使えるらしい。
ただし、このオプションは以下のスケジュールで無視されるようになり、結局はバージョンアップがいずれ必要になるので要注意。

June 6, 2018: /etc/coreos/docker-1.12 is ignored in the alpha channel.
June 20, 2018: /etc/coreos/docker-1.12 is ignored in the beta channel.
July 18, 2018: /etc/coreos/docker-1.12 is ignored in the stable channel.

今後考えたいこと

CoreOSの自動アップデートをオフにしておけば今回のような障害は防げるものの、セキュリティとのトレードオフとなる。人柱環境という面もあるのでやはり積極的にアップデートしていきたい。
となると、OSアップデート後にDockerが起動しない状況になったらアップデートを一旦自動ロールバックするとかできればうれしいかなぁ...と思ったりもするのですが、CoreOSの自動アップデートってどこまで制御できるんでしょうかね?

  1. 検証環境なので、人柱的に敢えてBeta channel使ってます。

  2. 1点解せないのが、今回v17.09.0なのにdocker daemonがもう使えなくなっているというところ。この点については、ISSUEも立っていたが今回は深く追っていない。

  3. これ事前に読んで変更点を押さえておけよ、という感じですかね :confused:

12
5
1

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
12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?