あらしおブログ

技術ネタ中心の粗削りブログ

Docker コンテナ起動時にエラー System error: write /sys/fs/cgroup/devices/...: no such device がでたときの対処法

CentOS 7 + Docker 1.9 で以下のようなエラーがでて、コンテナがたまに起動できなくなることがありました。 そのときの対処法をまとめておきます。

Error response from daemon: Cannot start container 479acdbe53fc117178f9797bce1eaf3a4c3b68021f22df2f3e0f95bd28afdb6b: [8] System error: write /sys/fs/cgroup/devices/system.slice/docker-479acdbe53fc117178f9797bce1eaf3a4c3b68021f22df2f3e0f95bd28afdb6b.scope/cgroup.procs: no such device

原因

CentOS 7 の systemd によるリソース管理と Docker の相性が悪く、このようなエラーが発生する場合があるようです。 障害報告を見ると、 それ以外のディストリビューションでの報告はないので、RedHat 7 系 + systemd 固有の問題なのかもしれません。

Docker ではリソース管理ドライバとして、この systemd または、 Docker 独自のドライバである cgroupfs を使うことができます。 Docker 1.9 系ではデフォルトで systemd を使うようになっています。

回避策

Docker の起動オプションに --exec-opt native.cgroupdriver=cgroupfs を追記することで解決しました。 起動オプションの設定は /etc/sysconfig/docker にあります。

OPTIONS='--exec-opt native.cgroupdriver=cgroupfs  ... '

再起動で設定を反映

sudo systemctl restart docker

なお、Docker 1.10 以降はデフォルトで cgroupfs を使うようになったので、Docker のアップデートで解決することもできるようです。

参考: Random "Cannot start container" Errors on 1.9.0-rc5 CentOS7 · Issue #17653 · docker/docker · GitHub