2016-01-07 11 views
29

Docker 1.9.1でドッカーボリュームを取り外す際に問題が発生しました。Dockerは使用中ですが、ドッキング用の容器はありません

docker ps -aが空になるように、停止したすべてのコンテナを削除しました。

docker volume lsを使用すると、ドッキング用の容器が全部ホストされています。

docker volume ls 
DRIVER    VOLUME NAME 
local    a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66 
local    4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317 
local    eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78 
local    91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c 
local    4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69 
local    68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750 
local    7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47 
#etc x 50 

これらのボリュームはどれも重要なものが含まれていないので、私はdocker volume rm $(docker volume ls -q)ですべてのボリュームを削除してみてください。プロセスで

は、大部分が削除されますが、私は戻って取得:

Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 

をそれらのかなりの部分について。最初にコンテナを持っていないと、これらのボリュームはどのように使用されていますか?

+7

ドッカーは、参照カウントを使用して、ボリュームがまだ使用中であるかどうかをチェックします。これはすべてメモリ内で行われます。何らかの形でバグまたは競合状態になっている可能性があります。その結果、コンテナは削除されますが、カウンタは更新されません。デーモンを再起動するとこれを解決するはずですが、どこかにバグがある可能性があります。あなたの設定に特別なものがありますか?(例えば、ドッカーイン・ドッカー、スウォームを使用していますか?)いくつかのスクリプトやツールを使って容器を掃除しますか? – thaJeztah

+1

ドッカー '1.9.0'にあります。私はあなたの踏み込みを試み、すべての巻を取り除くことができます。 – firelyu

+4

ちょっとおかげ@thaJeztah私のためにこれらのゴーストボリュームのすべてをクリアしドッカーデーモン( 'sudoのサービスドッキングウィンドウのstop'と' sudoのサービスドッキングウィンドウのstart')を再起動します。また、docker rm -vコマンドを使って問題なくボリュームを削除できるようです。私はUbuntu 15.10でdocker-composeを使用してきたことだけが、使用法の大きな違いです。私はこの問題を再現できるかどうかを報告しますが、それ以外の場合は単純な再起動で十分です。ありがとう! – Tkwon123

答えて

31

ここにゴンセールス!

あなたは残酷削除するには、これらの機能を使用することができ、すべてドッカ関連

removecontainers() { 
    docker stop $(docker ps -aq) 
    docker rm $(docker ps -aq) 
} 

armaggedon() { 
    removecontainers 
    docker network prune -f 
    docker rmi -f $(docker images --filter dangling=true -qa) 
    docker volume rm $(docker volume ls --filter dangling=true -q) 
    docker rmi -f $(docker images -qa) 
} 
あなたがXは、あなたのシェルインタプリタであるあなたの ~/Xrcファイルにそれらを追加することができます

ファイル(~/.bashrcあなたはbashのを使用している場合)とリロードそれらを実行することによってsource ~/Xrc

armaggedon

を、私はそれが役に立てば幸い:また、あなただけだけ実行します(関数が準備をする前に、あなたがかかったにかかわらず、オプション)コンソールに貼り付け、その後コピーすることができます!一般的なドッカークリーンアップにも便利です。これにより、コンテナ(実行中かどうか)とあらゆる種類のボリュームだけでなく、イメージも削除されることに注意してください。

+0

'docker volume rm'コマンドが失敗しました。コメントから、解決策は参照カウントを修正するためにdockerデーモンを再起動することであるように見えます。あなたはコメントを通じて慎重に読めば – BMitch

+1

@BMitchは、それはこのための解決策ではありません: '' '再起動後も、それはまだドッキングウィンドウの容量がuse..''' –

+0

ホルムズであると言う別の問題があるように見えるとではありませんその質問を投稿した人。上記の1つのコメントを参照してください。 – BMitch

0

これらのボリュームが実際にシステムにマウントされていることは間違いありません。/proc/mountsを見ると、そこに表示されます。おそらくsudo umount <path>またはsudo umount -f -n <path>にする必要があります。/proc/mountsまたはdocker volume inspectのいずれかでマウントされたパスを取得できるはずです

1

ドッカーにとってはかなり新しいです。私はいくつかの最初のテストの混乱をきれいにしていたし、ボリュームを削除することもできませんでした。実行中のすべてのインスタンスを停止し、docker rmi -f $(docker image ls -q)を実行しましたが、まだError response from daemon: unable to remove volume: remove uuid: volume is in useを受信しました。

私はdocker system pruneを行なったし、それが最後のボリュームを削除するために必要だったものをクリーンアップ:

[0]$ docker system prune 
WARNING! This will remove: 
- all stopped containers 
- all networks not used by at least one container 
- all dangling images 
- all build cache 
Are you sure you want to continue? [y/N] y 
Deleted Containers: 
... about 15 containers UUID's truncated 

Total reclaimed space: 2.273MB 
[0]$ docker volume ls 
DRIVER    VOLUME NAME 
local    uuid 
[0]$ docker volume rm uuid 
uuid 
[0]$ 

https://docs.docker.com/engine/reference/commandline/system_prune/

クライアントとデーモンのAPIを両方このコマンドを使用するには、少なくとも1.25でなければなりません。 クライアントのdocker versionコマンドを使用して、クライアントとデーモンのAPIバージョンを確認してください。

+0

ありがとう!これは私のためのトリックでした – manncito

関連する問題