症状
dockerコンテナ内で以下のようなコマンドを実行すると、
$ pipenv --rm
Removing virtualenv (/app/.venv)...
⠏ Running...Error: An error occurred while removing /app/.venv!
[Errno 16] Device or resource busy: '/app/.venv'
$ rm -r .venv
/bin/rm: cannot remove '.venv': Device or resource busy
このように
Device or resource busy
というエラーが出る
原因
docker の volume
として指定しているディレクトリ(おそらくファイルも?)を削除しようとすると、このようなエラーが表示されるということがわかった。
自分の場合、docker-compose.yml
がこうなってた。
docker-compose.yml
version: '3'
services:
app:
build:
...
volumes:
# NOTE: .venvは`volume`としてdockerが作成している
- hoge_volume:/app/.venv/
volumes:
hoge_volume:
結論
dockerがvolumeとして作成したディレクトリを削除しようとすると、Device or resource busy
というエラーが表示されるようだ。
ただし、他の原因のせいでこのエラーが表示されることもある。
dockerのvolumeとして作成したわけではないディレクトリやファイルが削除できない場合は、以下を参考にしてもいいかもしれない。