Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@wadahiro

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

More than 3 years have passed since last update.

はじめに

先日、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: 

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
wadahiro
nri
NRIは「コンサルティング」「金融 ITソリューション」「産業 ITソリューション」「IT 基盤サービス」の4事業でお客様のビジネスや快適な社会、暮らしを支えています。※各記事の内容は個人の見解であり、所属する組織の公式見解ではありません。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?