#2021-01-18#「Docker」-画像を削除

このメモの内容には、ローカルのDockerイメージを削除する方法、リモートのDockerイメージを削除する方法、削除プロセスで一般的な問題に対処する方法、いくつかのDockerイメージの保存方法も含まれます。

リモートミラーを削除する

現在、ミラーウェアハウス(Docker Hubなど)のミラーはコマンドで削除できないため、ミラーウェアハウスで削除する必要があります。特に複雑なコンテンツを含まないボタンをクリックして削除操作を完了しますので、スキップしてください。

#08/08/2019今日、Docker v19.03(現在)docker Registry rmiコマンドを確認しました。これにより、レジストリからイメージを削除できます。現在、実験段階です。

ローカルミラーを削除する

単一または複数のミラーを削除する

使用ドッキングウィンドウのRMIドッキングウィンドウの画像RM(あなたが唯一のローカルミラーではなく、ミラーの倉庫でミラーを削除することができます)ローカルミラーを削除するコマンドを:

#イメージIDで
docker rmi fd484f19954fを削除します#latest

がデフォルトのラベルであるため、次の2つは同等です
docker rmi test1:latest 
docker rmi test1 

#DIGESTを使用して削除することもできますREPOSITORYとDIGESTの間で、@を使用して区切ります。
#DIGESTによってプルされた画像にはTAGがないため、この方法が使用されます。
docker rmi test / busybox @ sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf

1)ミラーに複数のタグがあり、そのタグが削除パラメーターとして使用されている場合、コマンドはタグのみを削除します
。2)ミラーに一意のタグがある場合、コマンドはタグを削除してからミラーを削除します。

コンテナで使用されている画像を削除する

イメージに使用中のコンテナーがある場合、削除することはできません。コンテナーとイメージを削除するには、-fオプションを使用する必要があります。

docker image rm --force "REPOSITORY:TAG"

すべてのミラーを削除します

すべての画像を削除する場合は、次のコマンドを使用できます(高度なフィルタリングにはdocker画像の--filterオプションを使用できます)。

#次の2つのコマンドは同等です
docker image rm $(docker image ls -a -q)
docker rmi $(docker images -a -q)

#コンテナイメージを削除します
docker image rm -f $(docker image ls -a -q)

同じIMAGEIDを持つすべてのミラーを削除します

画像に複数のタグがある場合、IMAGE IDを使用して削除すると(docker rmi fd484f19954f)、次のエラーが生成されます。

エラー:競合、複数のリポジトリでタグ付けされているため、イメージfd484f19954fを削除できません。-fを使用して強制的に2013/12/11 05:47:16エラー:1つ以上のイメージを削除できませんでした

方法1:この時点で-fオプションを使用できる場合、これによりすべてのタグが削除され、ミラーが削除されます。

docker rmi --force fd484f19954f

方法2:コマンドgrepを使用してフィルタリングし、その結果をdockerrmiパラメーターとして使用して削除します。

方法3:docker inspectコマンドを使用します。コマンド出力のRepoTagsフィールドに、削除する関連タグが表示されます。

一般的なエラー処理

#画像に依存する子画像があります

Dockerで依存する子イメージを見つける

問題の説明:
ミラー(docker rmi a990d6e2b083)を削除すると、次のエラーが表示されます。

デーモンからのエラー応答:競合:d86795370e7bを削除できません(強制できません)-イメージに依存する子イメージがあります

問題の原因:
このエラーは、削除されたミラーに依存サブミラーがあることを示しています。

解決:

############################################## ###############################
簡単なアプローチ
############## ############################################## ############### 
docker image inspect --format = '{ 
    
    { 
    。Id}} {
     {.Parent}}' \ 
    $(docker image ls --all --filter since = a990d6e2b083 -q)| grep a990d6e2b083 

#上記のコマンド:
#1(docker image ls)a990d6e2b083 docker image inspect)の後にミラー#2を見つけ、これらのミラーの親ミラーを取得します
#3(grep)親ミラーをフィルタリングすると、次のようになります。このミラーのサブミラーを参照します。

############################################## ###############################
しかし、問題はこれほど単純ではありませんでした
########## ############################################## #####################
最大の問題は、サブミラーがまだあるので、ゆっくり探しますか?
#実際にあなたがしなければならないことは非常に簡単です。通常、この問題は、ミラーを参照するダングリングミラーが原因であるため、すべての「ダングリング」ミラーを削除します。 
    if [$(docker history --quiet $ {image} | grep $ {1})]#このサブミラーの構築履歴と、このミラーが含まれているかどうかを確認します。そうである場合は、削除する必要があります。
#「
Danglingmirror」はdocker rmi $(docker images --filter "dangling = true" -q --no-trunc)

#################を安全に削除できます############################################## ############
ただし、実際の正しいアプローチは次のとおりです。
削除するサブミラーのサブミラーのサブミラーを見つけます...(これ以上削除しないでください)
# https://stackoverflow.com/questions/38118791/can-t-delete-docker-image-with-dependent-child-images/38119847#38119847#answer-53037893 
############# ############################################## ################# 
recursive_remove_image(){ 
  for image in $(docker images --quiet --filter "since = $ {1}")#このミラーの後にミラーを見つける。サブミラーはこの後なので。
  do 
  done 
  #実行削除
    then 
      recursive_remove_image "$ {image}"#再帰的に、このミラーが適用されているサブミラーを削除します。
    fi
  echo "Removing:$ {1}" 
  docker rmi -f $ {1} 
} 
recursive_remove_image "<image-id>"

参照

 

 

おすすめ

転載: blog.csdn.net/u013670453/article/details/112773561