web-dev-qa-db-ja.com

孤立したDockerマウントホストボリューム?

/ var/lib/docker/volumesフォルダーを調べたところ、次の行に沿ったコンテンツを持つconfig.jsonファイルを含むDocker UUIDという名前のフォルダーであふれていることがわかりました。

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

どこ

/path/to/mounted/volume

は、ある時点で-vスイッチを使用してdockerコンテナーにマウントされたホスト上のフォルダーへのパスです。このようなフォルダーは、Dockerでの実験の開始時、つまり約3週間前に遡ります。

問題のコンテナは停止され、Dockerはかなり前にrm'edされたため、これらのエントリが販売期限を過ぎていないことはわかりません。これは疑問を投げかけます-残っているのはバグを見ているのですか、それとも/ var/lib/docker/volumesからそのようなエントリを手動で破棄する必要がありますか?

62
DroidOS

Docker 1.9以降では、ネイティブな方法があります。

すべての孤立ボリュームを一覧表示します

_$ docker volume ls -qf dangling=true_

それらすべてを排除します

$ docker volume rm $(docker volume ls -qf dangling=true)

138
Roman Usherenko

Dockerユーザーガイドから:

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

これは、偶発的なデータ損失を防ぐための意図的な動作です。 docker-cleanup-volumes のようなツールを使用して、未使用のボリュームをクリーンアップできます。

28
Kevan Ahlquist

Docker 1.13以降およびce/ee 17以降のリリース番号では、 volume Pruneコマンド を使用します

docker volume Prune

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

9
Matt