linux

dockerで failed to remove root filesystem for …. が出て,コンテナが削除できない時

dockerでコンテナの起動や再起動を繰り返していると,良く上記のエラーに遭遇するので,その対処法を書いときます。


現象

dockerでdocker downとかdocker-compose down とかでdockerで動いているコンテナを落とす時に,
たまに以下のようになってコンテナをアンマウントできない事が起きます。


$ /data/docker/compose/docker-sharelatex# docker-compose down
Removing redis ... error

ERROR: for redis {"message":"driver \"devicemapper\" failed to remove root filesystem for 79e3db82bffb1b3b29d1037969cd41bb434bcc4cc921c373d1aec325adcccd8c: remove /data/docker/devicemapper/mnt/96558b07189b22d3e7348a7c5e87bdeb458adf8137bd2d1e19bdec5e87871d04: device or resource busy"}

どうも,ストレージバックエンドがaufsだろうがdmだろうが起こるらしく,
結局最後はサーバを再起動するまで刺さってしまうというのが面倒くさいなーと思っていました。

対処法

要するに,イメージファイルを喰ってるプロセスをkillしてあげれば良いらしいです。

なので,以下のワンライナーでイメージファイルを喰ってるPIDを割り出します。


$ grep docker /proc/*/mountinfo | grep <削除出来ないデバイスのUUID>

すると,/proc/xxxx のどれかが引っかかるので,このPIDのプロセスをlsof -c などで調べます。

自分の場合は,systemd-machinedが喰ってたようなので,
systemctl restart systemd-machined で再起動した所,docker-compose downできました。

感想

いつもこれやり方を忘れるので,この現象に遭遇すると面倒くさくてサーバ再起動しがちだったのですが,
まあ,ココに書いとけば忘れないで済むかな。。

Leave a Reply

Your email address will not be published. Required fields are marked *