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


840

OS X 10.8.4(Mountain Lion)のVagrantでDockerを実行しています。保存したイメージを削除しようとすると、常にエラーが発生します。

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

rmiヘルプによると、正しい構文はdocker rmi IMAGE [IMAGE...]であり、それをどのように解釈すればよいかわかりません。

画像を削除するにはどうすればよいですか?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

興味深いことに、を実行するdocker psと、コンテナがまったく表示されません。実行するとdocker images、4つのbase画像と1つのnode画像が表示されます。


1
どのバージョンのDockerを使用していますか?「docker version」と「docker info」の出力を貼り付けることはできますか?私はマスターで試してみましたが、うまくいきました。
2013

その情報で質問を更新しました。
Jules

1
docker info画像の実際の量を示していますが./docker images -a -q | sort | uniq | wc -l、同じ結果になるはずです(-aはすべての画像、-qはidのみ)。docker psアクティブなコンテナのみdocker ps -aを表示します。すべてのコンテナを一覧表示できます
2013

-Dオプションとクライアントでdockerデーモンを起動しようとすることはできますか?docker -d -D& ; docker -D rmi <id>。あなたも試すことができますCID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $IDか?
2013

4
このプルリクエストを確認してください:github.com/dotcloud/docker/pull/1225
13

回答:


1013

お試しくださいdocker rmi node。うまくいくはずです。

作成されたすべてのコンテナを表示するのは簡単docker ps -aです。

すべての既存のコンテナー(イメージではない!)を削除するには docker rm $(docker ps -aq)


13
一部のコンテナーがまだ実行中の場合は、次のコマンドを実行して、すべてのコンテナーを停止することができます:docker stop $(docker ps -qa)。実行中のコンテナーを削除しても機能しない可能性があると思います。少なくとも、これに問題があったことを覚えています。私は彼女を間違っているかもしれません...私はmanページをチェックしました、そしてそれは私の仮説をサポートします: "-f、--force = true | false実行中のコンテナの強制削除。デフォルトはfalseです。"
Konrad Kleine 2014

1
ああ、「既存のコンテナをすべて削除」のコマンドを知りませんでした。自分で作成した:docker ps -a | sed -r 's / ^(\ w +)。* / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^(\ w +)/ docker rm \ 1 / g' | awk 'system($ 0)'ありがとう!
Anurag、2015年

4
基本的な機能を実現するためにシェル固有の機能を使用する必要がある場合は、コマンドラインオプションの設計が不適切です。
user3467349

既存のすべてのイメージを削除するには、次を使用できます-"docker rmi $(docker images -q)"
human

Windows PowerShellを使用してすべての既存のコンテナーを削除するには: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif

565

Dockerイメージ/コンテナーを削除する方法のいくつかを次に示します。

1つの画像を削除

docker rmi image_name:version/image-id

すべての画像を削除

docker rmi $(docker images -qf "dangling=true")

コンテナーを強制終了して削除します。

docker rm $(docker kill $(docker ps -aq))

注:正常なシャットダウンの場合はに置き換えkillてくださいstop

「my-image」を除くすべての画像を削除します

grepを使用してmy-image、およびubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

または(awkなしで)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))


25
追加:「ぶら下がり」画像(タグのない画像)を削除:docker rmi $(docker images -qf "dangling=true")
kolypto

5
shoudl bedocker rm $(docker kill $(docker ps -a -q))
BMW、

1
awkなしで「以外をすべて削除」:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie

1
@kolypto「dangling = true」は、ぶら下がっていないコンテナを削除しないことになります。残りを削除するには、-fおよびダングリングフラグを除いて、もう一度実行します。
DougW

1
それは私だけですか、それとも最後の提案(または(awkなし))は実際には機能していませんか?
マイクワイズ

196

すべてのDockerコンテナーを削除する

docker rm $(docker ps -a -q)

すべてのDockerイメージを削除する

docker rmi $(docker images -q)

7
タグの付いていない画像を削除しますdocker rmi $(docker images | grep "^<none>" | awk "{print $3}")
バレットクラーク

1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}")その後、2015年のライブリリースタグを削除する(例:)live-20150121223ことができます sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
同等8

それを強制するには、次のように記述する必要があります。docker -f rm $(docker ps -a -q)
Adrian Lopez

71

イメージIDを使用してDockerからイメージを削除するには:

  1. すべての画像のリストを取得する

    docker images
    
  2. 削除するイメージのイメージIDを特定します。次に例を示します。

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. 最後に、イメージIDを使用してイメージを削除します(最初の3桁のみが必要です)

    docker rmi 08d
    

1
まず、1ストップコンテナへの必要性と、それを削除し、参照してくださいstackoverflow.com/questions/21398087/...
vikramvi

37

画像:

  1. 画像の一覧表示

    ドッカー画像

  2. 1つの画像を削除

    docker rmi image_name

  3. 1つの画像を強制的に削除

    docker rmi -f image_name

容器:

  1. すべてのコンテナを一覧表示します

    docker ps -a

  2. 1つのコンテナーを削除する

    docker rm container_id

  3. 1つのコンテナを強制的に削除する

    docker rm -f container_id


29

古いDockerコンテナーを削除する方法で VonCがコメントした更新。

Docker 1.13(2016年第4四半期)では、次のものが用意されています。

docker system prune 未使用のデータをすべて削除します(つまり、コンテナーが停止した、コンテナーのないボリューム、コンテナーのないイメージの順)。

PR 26108commit 86de7c0を参照してください。これらは、Dockerデーモンデータがディスク上で使用している容量を視覚化し、「不要な」過剰を簡単にクリーンアップできるようにするいくつかの新しいコマンドを導入しています。

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

完全な回答に感謝しますが、これは元の質問に直接回答するものではありません(すでに回答されており、トップ回答はまだ関連しています)。
ジュール・

2
同意する。しかし、この質問のタイトルは非常に一般的であるため、これは参照用の質問になっているので、メカニズムの更新を行うことは適切であると考えました。
qkrijger 2016年

24

コンテナーの削除

  1. 特定のコンテナを削除するには

    docker rm CONTAINER_ID CONTAINER_ID
    
    • 単一画像の場合

      docker rm  70c0e19168cf
      
    • 複数の画像の場合

      docker rm  70c0e19168cf c2ce80b62174
      
  2. 終了したコンテナを削除する

    docker ps -a -f status=exited
    
  3. すべてのコンテナを削除します

    docker ps -q -a | xargs docker rm
    


画像を削除する

docker rmi IMAGE_ID
  1. 特定の画像を削除する

    • 単一画像用

      docker rmi ubuntu
      
    • 複数の画像

      docker rmi ubuntu alpine
      
  2. ぶら下がり画像の削除ぶら下がり画像
    は、Docker画像が複数の画像で構成されているため、タグ付けされた画像とは関係のないレイヤーです。

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. すべてのDockerイメージを削除する

    docker rmi -f $(docker images -a -q)
    

ボリュームの削除

ボリュームを一覧表示するには、次を実行します docker volume ls

  1. 特定のボリュームを削除する

    docker volume rm VOLUME_NAME
    
  2. ダングリングボリュームを削除する

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. コンテナーとそのボリュームを削除する

    docker rm -v CONTAINER_NAME
    

なぜダブルCONTAINER_ID
Peter Mortensen、

19

docker rm container_name

docker rmi image_name

docker help

rm 1つ以上のコンテナを削除します

rmi 1つ以上の画像を削除します


おかげで、この質問にはすでにいくつかの回答と選択された回答があり、ほぼ3年前に問題を解決しました。
ジュール

13
docker rmi  91c95931e552

デーモンからのエラー応答:競合、91c95931e552を削除できません。コンテナー76068d66b290がそれを使用しているため、-fを使用してFATA [0000]を強制しますエラー:1つ以上のイメージの削除に失敗しました

コンテナIDを見つける

# docker ps -a

# docker rm  daf644660736 

それは質問への答えですか?
Peter Mortensen、

なんでdaf644660736?それは以前のものとどのように関連していますか?
Peter Mortensen、

5

まず、削除するDockerイメージに接続されているDockerコンテナーを停止して削除する必要があります。

そのため、まず

  • docker stop container-id -実行中のコンテナを停止するには
  • docker rm container-id -コンテナを削除/削除するには

その後、

  • docker rmi image-id -画像を削除/削除するには

3

バージョン1.13以降の場合:

docker image rm [OPTIONS] IMAGE [IMAGE...]

比較:

[OPTIONS]差がないように見えます。

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

From:Docker 1.13の紹介

CLIの再構築

Docker 1.13では、すべてのコマンドを再グループ化して、相互作用する論理オブジェクトの下に配置しました。例えば、listおよびstartコンテナのは、今のサブコマンドですdocker containerhistoryのサブコマンドですdocker image

これらの変更により、Docker CLI構文をクリーンアップし、ヘルプテキストを改善し、Dockerをより使いやすくします。古いコマンド構文は引き続きサポートされていますが、新しい構文を採用することをお勧めします


3

Dockerには、削除するコマンドがいくつか用意されていimagesます。

表示/削除Images

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

docker rmi -f $(sudo docker images -a -q)

また、filterパラメータを使用して、画像のセットを一度に削除することもできます。

例:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

したがって、次のようにフィルター画像を削除できます。

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

1

を使用してそれらをすべて削除します

ステップ1:すべてのコンテナーを強制終了する

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

ステップ2:最初にRMする

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

手順3:強制的に画像を削除する

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

子の依存関係のために削除できないというエラーが発生した場合は、手順1を使用します


1

終了したコンテナを自動的/定期的にクリーンアップし、実行中のコンテナで使用されていないイメージとボリュームを削除する場合は、イメージをダウンロードできますmeltwater/docker-cleanup

複数のサーバーに1日に数回展開するため、これを運用環境で使用します。すべてのサーバーにクリーンアップする必要はありません(これは苦痛です)。

ただ走れ:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

30分ごとに(またはDELAY_TIME = 1800オプションを使用して設定した場合は)実行され、終了したコンテナとイメージをクリーンアップします。

詳細:https : //github.com/meltwater/docker-cleanup/blob/master/README.md


1

タグ付き(名前付き)の画像とそのコンテナーを削除するシェルスクリプトを次に示します。docker-rmiとして保存し、「docker-rmi my-image-name」を使用して実行します

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE

xargs -r一致しないコンテナケースで機能させる必要があります。
として。

0

なぜ誰も言及しなかったdocker-compose!1週間使ってみて、それなしでは生きていけません。必要なのは、ほんの数分勉強するymlを書くことだけで、それで準備が整います。イメージ、コンテナー(いわゆるサービスで必要)を起動し、Dockerネイティブコマンドで使用するのと同じようにログを確認できます。試してみる:

docker-compose up -d
docker-compose down --rmi 'local'

docker-composeを使用する前に、独自のシェルスクリプトを作成しました。特に、アプリケーションアーキテクチャが変更された場合は、必要に応じてスクリプトをカスタマイズする必要がありました。docker-composeのおかげで、これを行う必要がなくなりました。


docker-composeはオーケストレーションツールであり、単純なプロジェクトで使用するには実用的でないことがよくあります。この質問のコンテキストでは、スタンドアロンdockerソリューション(しばしばフィニッキーなdocker-compose.yml設定の使用を必要としない)が推奨されます。さらに、すでに多くの良い答えがここにあります。
ジュール

@Jules誰もdocker-composeについて言及していませんが、それらが悪い答えであることを意味するわけではなく、これが無力な答えであることも意味しません。Dockerのネイティブコマンドは悪くありませんが、退屈で、毎回かなりのタイピングが必要です。「1つは良い、2つは多すぎる」。
Tiina

-1

私にとっては、以下がうまくいきました:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

次に、次のように実行してイメージを削除します。

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

-1

リスト画像:

ahanjura@ubuntu:~$ sudo docker images

リポジトリタグイメージID作成サイズ88282f8eda00 19秒前308.5 MB 13e5d3d682f4 19時間前663 MB busybox2最新05fe66bb1144 20時間前1.129 MB ubuntu 16.04 00fd29ccc6f1 5日前110.5 MB ubuntu 14.04 67759a80360c 5日前682.72.730984 92.4 MB 921.4 MB 214.47 MB​​ 921.4 7 MB 222.7 MB 901.4 busybox最新6ad733544a63 6週間前1.129 MB ubuntu 16.10 7d3f705d307c 5か月前106.7 MB

画像を削除:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

削除:SHA256:88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194削除された:SHA256:4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9削除された:SHA256:8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8削除された:SHA256:b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

デーモンからのエラー応答:競合:13e5d3d682f4を削除できません(強制する必要があります)-停止したコンテナー5593e25eb638がイメージを使用しています

強制削除:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

削除:SHA256:13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e削除された:SHA256:3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378削除された:SHA256:5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af削除された:SHA256:18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

私の場合、問題は同じ名前の画像を牽引していることです。解決策は、名前またはIDの後にタグを追加することです。

sudo docker rmi <NAME>:<TAG>

例:

sudo docker rmi php:7.0.4-fpm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.