2017-10-30 18 views
0

私はDockerには新しく、私は最近Ubuntuコンテナを起動し、数日後に優雅に停止しました(私は "docker ps"を使用していません)。私はDocker rmi - これは大丈夫ですか?

docker rmi ubuntu 

を使用してUbuntuのイメージを削除しようとしたとき、私は次のエラーを得た:

Error response from daemon: conflict: unable to remove repository reference "ubuntu" (must force) - container 65c315b169b8 is using its referenced image 747cb2d 60bbe

私は、

docker rmi ubuntu --force 
を画像の削除を強制的に "--force" を使用することができます

それを行うには、優雅で安全な方法がありますか?

答えて

1

デフォルトでは、docker psは実行中のコンテナのみを表示します。停止したものはdocker ps --allで表示できます。

あなたがコンテナのすべてを削除したい場合は、その後、停止しているかではない、あなたが

$ docker rm $(docker ps -all -q) 

-qとbashプロンプトからこれを達成することができ、docker rm <IMAGE_ID>

で第一の容器を削除することができますswitchはIDだけを返します

+0

ありがとうございます!ドミノのrmi ubuntu --forceを使っても構いませんか? – Uri

+1

TBH私はこれに対する決定的な答えを知らない。私はあなたのようであり、絶対に必要でない限り、力を使うのが好きではありません。 この回答は強制的に削除されました。 https://stackoverflow.com/questions/21398087/how-can-i-delete-dockers-images – Spangen

1

正常にやりたいのであれば、ubuntuを使っている他のイメージがあるかどうかを調べるべきです。とにかく、あなたのケースでは、そのイメージに関連するコンテナがあります。ここで

はこれを取得する方法についてスクリプトの例です:ドッカーは、各コンテナに画像データをコピーしません

containerId=$(docker container ls -a | grep ubuntu | awk '{ print $1 }') 
docker container rm $containerId 
docker image rm ubuntu 
+0

実行中のコンテナは画像は削除されましたが正常に動作しますか? – Uri

+0

よく、ベースイメージを強制的に削除すると、関連するすべてのイメージが削除されます – Stefano

1

、イメージを実行しているすべてのコンテナは、ファイルシステムのその部分への読み取り専用のポインタを持っています(個々のコンテナのための独自のローカルRWレイヤを持つ)。したがって、コンテナがそれを使用している間にイメージを削除すると、それが依存するコンテナとオーバーレイファイルシステムが破損します。

代わりに、コンテナを先に取り出してください。これは、実行するのではなく終了したことがあり、あなたがその特定の画像IDを実行しているコンテナの簡単なリストについては、docker ps -a | grep $image_idを行うことができますが、優先リストは、任意の子孫含まれます:そして、あなたが実行できるようになります

docker rm $(docker ps -aq --filter "ancestor=747cb2d60bbe") 

docker rmiコマンドを使用します。

関連する問題