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