Docker:コンテナ起動時に自動作成されたvolumeのみ削除する
volume一覧の例
docker volume ls
DRIVER VOLUME NAME
local 0b86b74a54e87cb152681c0ad043a9c4d1e5befbf2c40c21c1ba600a7de34bd6
local 0cfbe53c27101b4d69db10888933375c4b0d92cd861e7aeb773ebbef9c20fd4a
local 0eed9d89f6ee5ee7cb4b6aef31769f0f549052b9bc6ab43ed89b2c83e5b7490a
local 60db7cc46cd5ab4a43bbb463f9a5b3f5c903b0a1f4ed6cd6838de08abf91c1ad
local 73d36529b371dbc465cfb664ad5953542eba63899639cf2f82db85c77c44c227
local 87c805cb7f8245001773249c0552644cb5fcc1336ee1ed0acfec06b82b807504
local 757e9b691bfb3a83a2fe4b0e4a8dc9fa52830b3cc7cac97a4687a915035421fc
local 437715b0f39c74eb59a92378be8b6e604f7f35365a482c7e0b135be1090cb990
local 563283a29f203cfa03acac8b52b8de016aeecd6682f08a44a014bcf685f30eff
local a61fd5a1af35cf452a69f982006d7dbdf1610590867cb12891d988e02bd29783
local d88cfd70919ead0bf668ded74e954bef325c80b65d33a54b31f4ff2951a14b6d
local e223cf7c182e18e1e9e46580d36e6ec7a72a0572c97b0e57729a88011220cbb0
local e544f0af0447868a0d1858fae9f061a6e8d58de9aa867aaf41c5fe696ab64ff4
local eab87aa8733e11693403a674dcc3b63218f7db8b7ded03563ee5be19c12fd626
local fc79d2416bdae5a4c96a6dd550cccc02e933cca9c793110df6d72cf4761efb8a
local local_django
local local_postgres-data
local myvolume
local test_django
local test_py-libs
local test_postgres-data
local test_postgres-data_backups
消したいvolume
local 0b86b74a54e87cb152681c0ad043a9c4d1e5befbf2c40c21c1ba600a7de34bd6
local 0cfbe53c27101b4d69db10888933375c4b0d92cd861e7aeb773ebbef9c20fd4a
local 0eed9d89f6ee5ee7cb4b6aef31769f0f549052b9bc6ab43ed89b2c83e5b7490a
local 60db7cc46cd5ab4a43bbb463f9a5b3f5c903b0a1f4ed6cd6838de08abf91c1ad
local 73d36529b371dbc465cfb664ad5953542eba63899639cf2f82db85c77c44c227
local 87c805cb7f8245001773249c0552644cb5fcc1336ee1ed0acfec06b82b807504
local 757e9b691bfb3a83a2fe4b0e4a8dc9fa52830b3cc7cac97a4687a915035421fc
local 437715b0f39c74eb59a92378be8b6e604f7f35365a482c7e0b135be1090cb990
local 563283a29f203cfa03acac8b52b8de016aeecd6682f08a44a014bcf685f30eff
local a61fd5a1af35cf452a69f982006d7dbdf1610590867cb12891d988e02bd29783
local d88cfd70919ead0bf668ded74e954bef325c80b65d33a54b31f4ff2951a14b6d
local e223cf7c182e18e1e9e46580d36e6ec7a72a0572c97b0e57729a88011220cbb0
local e544f0af0447868a0d1858fae9f061a6e8d58de9aa867aaf41c5fe696ab64ff4
local eab87aa8733e11693403a674dcc3b63218f7db8b7ded03563ee5be19c12fd626
local fc79d2416bdae5a4c96a6dd550cccc02e933cca9c793110df6d72cf4761efb8a
消したくないvolume
local local_django
local local_postgres-data
local myvolume
local test_django
local test_py-libs
local test_postgres-data
local test_postgres-data_backups
docker volume prune だとニーズを満たせない
docker volume prune
だと、現時点で使用していないvolumeが削除されてしまうため、
消したくないvolumeも未使用であれば削除されてしまう
docker volume prune
https://docs.docker.com/engine/reference/commandline/volume_prune/
削除対象のvolume名を抽出する
自動で作成されたvolumeは
- volume名に「_」が含まれていない
- volume名が64文字
であるため
docker volume ls | grep -E "[^_]{64}" | awk '{print $2}'
で削除対象のvolume名を抽出できる
各コマンドの説明
grep -E "[^_]{64}"
「_」を含まず、volume名が64文字のものを抽出する
awk '{print $2}'
出力結果からvolume名のみを抽出する
※awkは「"」ではなく「’」で文字列を囲む必要がある
削除対象のvolumeを削除するコマンド
for l in `docker volume ls | grep -E "[^_]{64}" | awk '{print $2}'`; do docker volume rm $l; done