名前に基づいてDockerイメージを削除するにはどうすればよいですか?


92

指定された文字列(imagename)を含む名前のDockerイメージのすべてのバージョンを削除したいと思います。
私は以下を試しましたが、うまくいかないようです:

docker images | grep 'imagename' | xargs -I {} docker rmi

回答:


134

次のことを試してください。

docker rmi $(docker images |grep 'imagename')

Windows Powershell:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")

16
Dockerの現在のバージョンはこれをサポートしています(grepなし):docker rmi $(docker images'imagename ')
Charlie

Dockerの現在のバージョンはこれをサポートしているようです-多分私は何かが足りないのですか?--docker rmi'imagename '
チャーリー

8
@Charlieほとんどの人は、正確に「imagename」という名前の単一の画像ではなく、「imagename」に一致するすべての画像に一致する方法を探していると思います。
RJFalconer 2017

次のエラーが発生します:「dockerrmiには少なくとも1つの引数が必要です。」
michali 2018

@michaliこれは、一致する画像が返されないことを意味します。実行するだけで、一致するエントリが存在することを確認できますか?docker images |grep 'imagename'
Rambler

71

もう少し正確なバージョン-リポジトリ名のみをgrepします:

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

25
これにより、最新のタグが付けられた画像のみが削除されますdocker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
2017

ありがとうございました!これが私が探していたものでした。
Hardhik

26
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

1
これが何をするのか説明できますか?ランダムなコードのビットは危険な場合があります。
キロジュール2018年

6
docker images --format '{{.Repository}}:{{.Tag}}出力をフィルタリングして、リポジトリとタグのみが表示されるようにします(つまりfoo:latest)。 grep 'imagenameこれらの行を、を含む画像のみにフィルタリングしますimagename。それ$()を入れると、それが評価され、docker rmi一致した画像が削除される外部に渡されます。
AdamParkin18年

以下のように拡大し、あなたが正確なイメージ名に対応するすべてのタグ付けされた画像を削除することができます:docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
ティミンズ

1
Windowsでは「grep」は存在しません(cmdまたはpowershell)以下は未亡人で使用できますdocker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
Zameer Fouzan 2018年

20

docker images実際には、最初の位置引数をフィルタリングする画像名として使用します。grepやawkは必要ありません。この-qオプションは、にフィードできる一致する画像IDのみを返しますdocker rmi

docker rmi --force $(docker images -q 'imagename' | uniq)

uniqあなたは同じ画像を異なるタグを付けなければならない場合に、重複を除去する必要があります。


これは確かに今日の最良の選択肢です。imagenameは引用符で囲む必要がありますが、質問の一貫性を保つため。
Colm Bhandal

8

--forceコマンドの最後に追加するだけです。お気に入り:

sudo docker rmi <docker_image_id> --force

よりインテリジェントにするために、イメージを削除する前に実行中のコンテナーを停止できます。

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

ではdocker ps$ 1は1番目の列(DockerコンテナーID)であり、$ 3は3番目の列(DockerイメージID)です。


5

私の答えはもっと簡単だと思います。

たとえば、画像名はpython_imageです。

次に、コードは次のようになります

docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")

これがお役に立てば幸いです。


ワイルドカード名に基づいて複数の画像に対してこれを行うことはできますか?
可変

3

私はまた別の簡潔な答えを得ました。唯一の変更は、不要な-I {}フラグを削除することでした。

docker images | grep 'imagename' | xargs docker rmi


3
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`

これにより、「imageName」という名前のすべての画像が削除されます。場合によっては、「画像が1つ以上のリポジトリで参照されています」などのエラーが発生することがあります。その場合は強制削除を使用してください。

docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`

別の方法は次のとおりです。

docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'

3

何らかの理由で、ここで指定された回答のいずれも使用できませんでした。これが私のために働いたものです。

docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}'重要な部分です。3番目の列からIDを抽出します。


3

私が働いた(Dockerバージョン19.03.5):

docker rmi $(docker images 'imagename' -q)

コマンド「dockerimages'imagename '-q」は、引用符で囲まれた引数のすべての画像IDを一覧表示するため、docker rmi(または強制の場合はdocker rmi -f)と連結すると、選択した名前のすべての画像が削除されます。



0

マイナーなコメント:私たちが経験していることから、Docker 18.03以降、名前だけに基づいてタグなしの画像を削除することはできなくなったようです。上記の名前+タグを使用するか、IDを使用する必要があります。

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'

0

docker rmi $(docker images --filter=reference="IMAGENAME:TAG")

たとえば、次の画像がある場合

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
abcdefg/hij                   7.0.0-beta-4.0      3128835950cd        7 days ago          51.4MB
abcdefg/hij-action            7.0.0-beta-4.0      42a7255beb74        7 days ago          97.4MB
abcdefg/hij-test              7.0.0-beta-4.0      17246aed35d0        7 days ago          97.4MB
abcdefg/hij-server            7.0.0-beta-4.0      42c45e561f2c        7 days ago          335MB
abcdefg/hij-init              7.0.0-beta-3.0      f648bb622933        7 days ago          55.2MB
abcdefg/hij-dir               7.0.0-beta-3.0      0db07d3aaccf        7 days ago          97.4MB
abcdefg/hij-mount             7.0.0-beta-3.0      18d1c0e1502c        4 weeks ago         33.7MB

次に docker rmi $(docker images --filter=reference="abcd*:*4.0")、最初の4つの画像を削除します。

詳細については、https://docs.docker.com/engine/reference/commandline/images/を参照してください。


動作しますが、ドッキングウィンドウのイメージがコマンドに「-q」を追加する方が良いでしょう: docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
troyfolger

0

以前に投稿されていなかった私のニーズを満たすために、この質問に対する解決策をまとめてください。

ローカルで作成されたイメージを照合したかった:library/myapp名前を変更し、タグを付けて、プライベートリポジトリにプッシュした:myrepo.org/library/myapp。それらがプッシュされたら、ローカルのdockerregをクリーンアップしたいと思います。

そして、何も見つからないか、コマンドがエラーをスローするかどうかは気にしません。したがって|| true、スクリプトに含めるために最後に追加されます。

docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true

0

@Adityaの回答に基づいて、bash関数を作成して画像を簡単に削除することもできます。この関数をあなたのに入れてください~/.profile。新しいシェルセッションを作成するか、によってソースしsource ~/.profileます。

function drmi() {
    docker images | grep $1 |  xargs docker rmi
}

使用法:

drmi golang

0

情報:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)

このエラーを出します:

デーモンからのエラー応答:無効な参照形式

おそらく私の画像は次のようになっているためです:

hostname:5000/imagename:<none>

イメージIDを使用して、次のコマンドを実行する必要がありました。

docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`

終了したコンテナを削除するには:

docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.