2015-01-07 4 views
59

私はちょうど私の/ var/libに/ドッキングウィンドウ/ボリュームフォルダを点検し、それが孤立したドッカーがホストボリュームにマウントしましたか?

{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true} 

のラインに沿った内容でconfig.jsonファイルが含まれているそれぞれのドッカーのUUIDとして名前のフォルダにあふれている発見
/path/to/mounted/volume 

は、ある時点で-vスイッチを使用してドッキングコンテナにマウントされたホスト上のフォルダへのパスです。私はDockerでの実験の始めに、つまり約3週間前にそのようなフォルダを持っています。

問題のコンテナが停止したとドッキングウィンドウはので、私はこれらのエントリが自分の売りによって日を過ぎていないことを確認することはできません長い時間前にrm'ed。これは問題を引き起こす - 私はバグを見ているか、/ var/lib/docker/volumesからそのようなエントリを手動で捨てる必要があるのか​​?

答えて

133

とネイティブな方法がありますまで:

一覧

$ docker volume ls -qf dangling=true

を持つすべての孤立したボリューム

$ docker volume rm $(docker volume ls -qf dangling=true)ドッカーについては

+1

私のクライアントは、新しい行に各ボリューム名を表示するので、このコマンドは最初のボリュームを削除するだけで、それぞれのボリュームをコマンドとして扱います。 (| sedの=真のダングリング-qfドッキングウィンドウのボリューム1! ':; N; $ BA; S/\ N//グラム!の') 'ドッカボリュームのrm $:' – emc

+0

@私は改行を削除するには、 'sed'を使用しましたemc、いくつかの場合、forループはsedを使うよりも読みやすくなります: 'for v in $(ドッカーボリュームls -qf dangling = true);ドッカーボリュームrm "$ v"を実行します。 done "; – Kevin

+1

@Kevin Xargsもかなり読める:' docker volume ls -qf 'dangling = true' | xargsドッカーのボリュームrm' – emc

28

ドッカーのユーザーガイドから:

あなたが最初のdbdataのコンテナ、または後続のコンテナDB1とDB2を含むボリュームをマウントした容器を、削除した場合、ボリュームは削除されません。ディスクからボリュームを削除するには、ボリュームへの参照を伴う最後のコンテナに対してdocker rm -vを明示的に呼び出す必要があります。これにより、コンテナ間でデータボリュームをアップグレードしたり、効果的に移行したりすることができます。 - source

これは、意図しないデータの損失を防ぐための意図的な動作です。 docker-cleanup-volumesのようなツールを使用して、未使用のボリュームを除去することができます。ドッカー1.9の場合

+3

である。いや、そうじゃない?私はすぐに量を扱うためのツールを増やすと思います。 –

+0

特に、あなたが突然あなたのディスクがいっぱいであることを発見し、Mac上のドッカーのネイティブマシンに入ることを試みている場合。 –

6

でそれらのすべてを排除1.13+ ce/ee 17+のリリース番号には、volume prune command

docker volume prune 

dangling=trueのクエリとは異なり、これは "リモート"ドライバベースのボリュームを削除しません。