特定のvolumeだけ削除したい
$ docker volume prune
だと未使用のvolume全て削除してしまうし、 $ docker volume ls
を見ても、どのvolumeが消したいコンテナのやつかわからない
削除したいvolumeをもつコンテナ名をセット
$ CONTAINER_NAME=hoge
コンテナ名が分からないとき
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fd9075c0f5d my_project_app "docker-entrypoint.s…" 59 minutes ago Up 59 minutes 0.0.0.0:8080->8080/tcp app
最後列のNAMESの値がコンテナ名
ワンライナー削除コマンド
$ docker inspect $(docker ps -f name=${CONTAINER_NAME} -q) | jq -r '.[].Mounts[] | select(.Type == "volume").Name' | xargs docker volume rm
概要
- コンテナ名からコンテナIDを取得
-
docker inspect
とjq
の組み合わせでvolume nameを取得 -
docker volume rm {volume name}
で削除
jq がない場合は要インストール
もっとシンプルなケース
コンテナの削除と同時にvolumeも削除したいケースなら
docker-compose down -v $CONTAINER_NAME
docker-composeを使ってるとき限定だが、こちらのほうが簡単