あるフリーランスエンジニアの色んなメモ!! ITスキル・ライフハックとか

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
comments powered by Disqus