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
イメージが表示されます。
docker rmi node
を試してください。それはうまくいくはずです。
作成されたコンテナをすべて見るのはdocker ps -a
と同じくらい簡単です。
(画像ではなく)既存のコンテナをすべて削除するには、docker rm $(docker ps -aq)
を実行します。
以下は、dockerイメージ/コンテナを削除する方法のいくつかです。
docker rmi image_name:version/image-id
docker rmi $(docker images -qf "dangling=true")
docker rm $(docker kill $(docker ps -aq))
注:正常なシャットダウンのためにkill
をstop
に置き換えます
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))
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
イメージIDを使用してDockerからイメージを削除するには:
全画像の一覧を取得する
docker images
削除する画像の画像IDを指定します。次に例を示します。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
kweku360/Java latest 08d3a9b8e166 2 weeks ago 5.733 GB`
最後に画像IDを使用して画像を削除します(最初の3桁のみが必要です)
docker rmi 08d
ドッカー画像
docker rmi image_name
docker rmi -f image_name
docker ps -a
docker rm container_id
docker rm -f container_id
VonCの古いDockerコンテナの削除方法にコメントして更新されました。
Docker 1.13(2016年第4四半期)では、以下のことが可能になりました。
docker system Prune
は、未使用のデータをすべて削除します(つまり、コンテナが停止し、コンテナがないボリューム、コンテナがないイメージの順に)。
PR 26108 および commit 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
特定のコンテナを削除する
docker rm CONTAINER_ID CONTAINER_ID
単一画像の場合
docker rm 70c0e19168cf
複数の画像の場合
docker rm 70c0e19168cf c2ce80b62174
終了したコンテナを削除する
docker ps -a -f status=exited
すべてのコンテナを削除する
docker ps -q -a | xargs docker rm
docker rmi IMAGE_ID
特定の画像を削除する
単一画像の場合
docker rmi ubuntu
複数の画像の場合
docker rmi ubuntu Alpine
ぶら下がっている画像を削除する
ダングリングイメージは、Dockerイメージが複数のイメージで構成されているため、タグ付きイメージとは無関係のレイヤーです。
docker rmi -f $(docker images -f dangling=true -q)
すべてのDockerイメージを削除する
docker rmi -f $(docker images -a -q)
ボリュームを一覧表示するには、docker volume ls
を実行します。
特定のボリュームを削除する
docker volume rm VOLUME_NAME
ダングリングボリュームを削除する
docker volume rm $(docker volume ls -f dangling=true -q)
コンテナとそのボリュームを削除する
docker rm -v CONTAINER_NAME
docker rm container_name
docker rmi image_name
docker help
rm 1つ以上のコンテナを削除する
rmi 1つ以上の画像を削除
docker rmi 91c95931e552
デーモンからのエラー応答:競合。コンテナー76068d66b290が使用しているため91c95931e552を削除できません。-fを使用してFATAを強制します。エラー:1つ以上のイメージを削除できませんでした
コンテナIDを探す
# docker ps -a
# docker rm daf644660736
まず、削除しようとしているDockerイメージに添付されているDockerコンテナーを停止して削除する必要があります。
だから、そのために、まず
docker stop container-id
- 実行中のコンテナを停止するdocker rm container-id
- コンテナを削除/削除するそれで、
docker rmi image-id
- 画像を削除/削除するバージョン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 container
のサブコマンドであり、history
はdocker image
のサブコマンドです。これらの変更により、Docker CLIの構文を整理し、ヘルプテキストを改善し、Dockerを使いやすくしています。 古いコマンド構文はまだサポートされていますが、私たちはみんなに新しい構文 を採用することを勧めます。
を使用してそれらをすべて削除します
ステップ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:forceを使って画像を削除する
for i in `Sudo docker images | awk '{ print $3}'`; do Sudo docker rmi --force $i ; done
子の依存関係のために削除できないというエラーが発生した場合は、手順1を使用してください。
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>")
これは、タグ付けされた(名前付き)画像を削除するためのシェルスクリプトです。 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
自動的にまたは定期的に終了したコンテナをクリーンアップし、実行中のコンテナで使用されていないイメージとボリュームを削除したい場合は、イメージ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