障害内容

Docker Engine のアップグレードを行ったところ、既存のコンテナが動かなくなってしまった。
または、エラーが出てエンジンが起動しなくなってしまった。

現象

CentOS Extras リポジトリから Docker Engine をインストールして利用している。セキュリティのため、まず検証環境にて Docker パッケージを yum update で更新したところ、docker ps などあらゆる docker コマンドが「Cannot connect to the Docker daemon.」というエラーを吐くようになってしまった。

要望

本番環境への適用のため、原因の調査および解決策の提示

 

  • 調査
    調査手法: ログ解析

    syslog によると、「permission denied」により Docker デーモンの起動に失敗していると判明した。
    一般に、SELinux のポリシー違反が permission denied となるため、SELinux のログ audit.log を調査した結果、SELinux ポリシー違反が原因であることが分かった。Docker Engine のメジャーアップデートにより動作が変わり、SELinux ポリシー定義が不足しているという、パッケージの不具合であると思われた。

  • 解決策
    SELinux 追加ポリシーの定義を行った。ディストリビュータへのレポートを検討していたが、まもなく更新パッケージの配布が始まった。

その他

Docker Engine は、急速に普及したこと、開発スピードが速いことなどから、ディストリビュータによる通常サポートからはずれた別パッケージとして提供されることがあります。
CentOS においても、Extrasリポジトリからの提供となり、OS のアップグレード以外のタイミングで Docker Engine のメジャーバージョンが上がってしまうことがあります。

これにより、前バージョンからの非互換な変更や、設定の非推奨化などが行われることがあるため、本番環境に適用する前の調査や検証がより重要になると思われます。