指定された文字列(imagename
)を含む名前のDockerイメージのすべてのバージョンを削除したいと思います。
私は以下を試しましたが、うまくいかないようです:
docker images | grep 'imagename' | xargs -I {} docker rmi
回答:
次のことを試してください。
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
出力をフィルタリングして、リポジトリとタグのみが表示されるようにします(つまりfoo:latest
)。 grep 'imagename
これらの行を、を含む画像のみにフィルタリングしますimagename
。それ$()
を入れると、それが評価され、docker rmi
一致した画像が削除される外部に渡されます。
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
実際には、最初の位置引数をフィルタリングする画像名として使用します。grepやawkは必要ありません。この-q
オプションは、にフィードできる一致する画像IDのみを返しますdocker rmi
。
docker rmi --force $(docker images -q 'imagename' | uniq)
uniq
あなたは同じ画像を異なるタグを付けなければならない場合に、重複を除去する必要があります。
--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)です。
私の答えはもっと簡単だと思います。
たとえば、画像名はpython_image
です。
次に、コードは次のようになります。
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
これがお役に立てば幸いです。
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}'
私が働いた(Dockerバージョン19.03.5):
docker rmi $(docker images 'imagename' -q)
コマンド「dockerimages'imagename '-q」は、引用符で囲まれた引数のすべての画像IDを一覧表示するため、docker rmi(または強制の場合はdocker rmi -f)と連結すると、選択した名前のすべての画像が削除されます。
マイナーなコメント:私たちが経験していることから、Docker 18.03以降、名前だけに基づいてタグなしの画像を削除することはできなくなったようです。上記の名前+タグを使用するか、IDを使用する必要があります。
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
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/を参照してください。
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
以前に投稿されていなかった私のニーズを満たすために、この質問に対する解決策をまとめてください。
ローカルで作成されたイメージを照合したかった:library/myapp
名前を変更し、タグを付けて、プライベートリポジトリにプッシュした:myrepo.org/library/myapp
。それらがプッシュされたら、ローカルのdockerregをクリーンアップしたいと思います。
そして、何も見つからないか、コマンドがエラーをスローするかどうかは気にしません。したがって|| true
、スクリプトに含めるために最後に追加されます。
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
@Adityaの回答に基づいて、bash関数を作成して画像を簡単に削除することもできます。この関数をあなたのに入れてください~/.profile
。新しいシェルセッションを作成するか、によってソースしsource ~/.profile
ます。
function drmi() {
docker images | grep $1 | xargs docker rmi
}
使用法:
drmi golang
情報:
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`