web-dev-qa-db-ja.com

Dockerは使用中ですが、Dockerコンテナーはありません

Docker 1.9.1でDockerボリュームを削除する際に問題が発生しました。

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

docker volume lsを使用すると、Dockerコンテナーのホスト全体が提供されます。

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

それらのかなりの部分について。そもそもコンテナが存在しない場合、これらのボリュームはどのように使用されていますか?

85
Tkwon123

これらの関数を使用して、Dockerに関連するすべてを残酷に削除できます。

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

armageddon() {
    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)
}

これらを~/Xrcファイルに追加できます。Xはシェルインタープリター(bashを使用している場合は~/.bashrc)ファイルで、source ~/Xrcを実行して再ロードできます。また、それらをコンソールにコピーアンドペーストして、その後(関数を準備するために前に選択したオプションに関係なく)実行するだけです:

armageddon

また、一般的なDockerのクリーンアップにも役立ちます。これにより、コンテナ(実行中かどうかに関係なく)およびあらゆる種類のボリュームだけでなく、イメージも削除されることに注意してください。

86

私はDockerを初めて使用します。私はいくつかの初期テストの混乱を片付けていましたが、ボリュームを削除することもできませんでした。実行中のすべてのインスタンスを停止し、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]$

docker system Prune

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

47
Benjamin West

おそらく、ボリュームはdocker-composeを介して作成されましたか?その場合、 get by by:

docker-compose down --volumes

Niels Bech Nielsenへのクレジット

43
Robert K. Bell

停止したコンテナの1つがボリュームを使用している可能性があります。このようなコンテナはコマンドで削除できます:

docker container Prune

その後、使用されていないボリュームを削除できます

docker volume Prune
11

ボリュームがコンテナに関連付けられている限り(実行中かどうかに関係なく)、削除できません。

あなたは走らなければならない

docker inspect <container-id>/<container-name>

このボリュームがマウントされている可能性のある実行中/非実行コンテナごとに。

ボリュームがいずれかのコンテナーにマウントされている場合、inspect command出力のMountsセクションに表示されます。このようなもの :-

"Mounts": [
            {
                "Type": "volume",
                "Name": "user1",
                "Source": "/var/lib/docker/volumes/user1/_data",
                "Destination": "/opt",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

責任のあるコンテナを特定した後、次を使用します。

コンテナを実行している場合はdocker rm -f container-1 container-2 ...container-n

実行されていないコンテナの場合はdocker rm container-1 container-2 ...container-n

ホストマシンからコンテナを完全に削除します。

次に、コマンドを使用してボリュームを削除してください:-

docker volume remove <volume-name/volume-id>

6

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

2
Jiri Klouda

現在、ドッカーが提供するものを使用して、一般的でより完全なクリーニングを行うことができます。

docker system Prune

停止しているコンテナとすべての未使用のイメージ(ダングリングイメージだけでなく)をさらに削除するには、コマンドに-aフラグを追加します。

docker system Prune -a
0
shackra