やっています
docker rmi c565603bc87f
エラー:
デーモンからのエラー応答:コンフリクト:c565603bc87fを削除できません(強制できません) - 画像に従属する子画像があります
だから-fフラグを付けても削除できない。当時とそのすべての子を削除するにはどうすればいいですか?
Linuxおよびdockerのバージョン
uname -a Linux goracio-pc 4.4.0-24-generic#43-Ubuntu SMP水6月8日19時27分37秒UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
docker versionクライアント:version:1.11.2 API version:1.23 Goバージョン:go1.5.4 Git commit:b9f10c9ビルド:Wed Jun 1 22:00:43 2016 OS/Arch:linux/AMD64
サーバー:バージョン:1.11.2 APIバージョン:1.23移動バージョン:go1.5.4 Git commit:b9f10c9ビルド:Wed Jun 1 22:00:43 2016 OS/Arch:linux/AMD64
画像を削除する前に、不要な画像を削除してください。
docker rmi $(Sudo docker images --filter "dangling=true" -q --no-trunc)
その後:
docker rmi c565603bc87f
ある場合には(私の場合のように)あなたは画像を削除しようとしているかもしれません複数のタグを持つ画像IDを指定することであなたが存在しないことを知ります。 。その場合、あなたは画像を削除したくないかもしれません。
docker rmi <image_id>
の代わりにここで説明されているような冗長なタグがある場合は、削除したい冗長なタグにdocker rmi <repo:tag>
を使用してください。
問題のイメージの後に作成されたすべてのイメージのイメージIDと親IDを見つけます。
docker inspect --format='{{.Id}} {{.Parent}}' $(docker images --filter since=<image_id> -q)
次にcommandを呼び出します。
docker rmi {sub_image_id}
"sub_image_id"は依存画像のIDです
私にとって効果的だったのは、IMAGE IDではなくREPOSITORY:TAGの組み合わせを使用することでした。
このイメージに関連付けられたコンテナーを指定せずにコマンドdocker rmi <IMAGE ID>
を使用してdockerイメージを削除しようとしたときに、次のメッセージが表示されました。
$ docker rmi 3f66bec2c6bf
Error response from daemon: conflict: unable to delete 3f66bec2c6bf (cannot be forced) - image has dependent child images
docker rmi RPOSITORY:TAG
コマンドを使用すると、正常に削除できました。
$ docker rmi ubuntu:18.04v1
Untagged: ubuntu:18.04v1
このコマンドはすべての画像を削除します(注意して使用してください)
--forceを使おうとしましたか
Sudo docker rmi $(Sudo docker images -aq) --force
上のコードは魅力的でも同じ問題を抱えています。
これは、ある画像とそれに依存するすべての画像を削除するスクリプトです。
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo must supply image to remove;
exit 1;
fi;
get_image_children ()
{
ret=()
for i in $(docker image ls -a --no-trunc -q); do
#>&2 echo processing image "$i";
#>&2 echo parent is $(docker image inspect --format '{{.Parent}}' "$i")
if [[ "$(docker image inspect --format '{{.Parent}}' "$i")" == "$1" ]]; then
ret+=("$i");
fi;
done;
echo "${ret[@]}";
}
realid=$(docker image inspect --format '{{.Id}}' "$1")
if [[ -z "$realid" ]]; then
echo "$1 is not a valid image.";
exit 2;
fi;
images_to_remove=("$realid");
images_to_process=("$realid");
while [[ "${#images_to_process[@]}" -gt 0 ]]; do
children_to_process=();
for i in "${!images_to_process[@]}"; do
children=$(get_image_children "${images_to_process[$i]}");
if [[ ! -z "$children" ]]; then
# allow Word splitting on the children.
children_to_process+=($children);
fi;
done;
if [[ "${#children_to_process[@]}" -gt 0 ]]; then
images_to_process=("${children_to_process[@]}");
images_to_remove+=("${children_to_process[@]}");
else
#no images have any children. We're done creating the graph.
break;
fi;
done;
echo images_to_remove = "$(printf %s\n "${images_to_remove[@]}")";
indices=(${!images_to_remove[@]});
for ((i="${#indices[@]}" - 1; i >= 0; --i)) ; do
image_to_remove="${images_to_remove[indices[i]]}"
if [[ "${image_to_remove:0:7}" == "sha256:" ]]; then
image_to_remove="${image_to_remove:7}";
fi
echo removing image "$image_to_remove";
docker rmi "$image_to_remove";
done
Simon Bradyの総当たり法 ここ を基にして、大量の画像がない場合は、このShell関数を使用できます。
recursive_remove_image() {
for image in $(docker images --quiet --filter "since=${1}")
do
if [ $(docker history --quiet ${image} | grep ${1}) ]
then
recursive_remove_image "${image}"
fi
done
echo "Removing: ${1}"
docker rmi -f ${1}
}
それからrecursive_remove_image <image-id>
を使ってそれを呼び出します。
私はdockerで名前"<none>"
を持ついくつかの未使用の画像を削除したいとき私はこの問題を解決するための問題unable to delete a354bbc7c9b7 (cannot be forced) - image has dependent child images
.Soに直面しています。
Sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01ee1276bbe0 lizard:1 "/bin/sh -c 'Java ..." About an hour ago Exited (1) About an hour ago objective_lewin
49d73d8fb023 javaapp:latest "/usr/bin/Java -ja..." 19 hours ago Up 19 hours 0.0.0.0:8091->8091/tcp pedantic_bell
405fd452c788 javaapp:latest "/usr/bin/Java -ja..." 19 hours ago Created infallible_varahamihira
532257a8b705 javaapp:latest "/usr/bin/Java -ja..." 19 hours ago Created demo-default
9807158b3fd5 javaapp:latest "/usr/bin/Java -ja..." 19 hours ago Created xenodochial_kilby
474930241afa jenkins "/bin/tini -- /usr..." 13 days ago Up 4 days 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp myjenkins
563d8c34682f mysql/mysql-server:latest "/entrypoint.sh my..." 3 weeks ago Up 4 days (healthy) 0.0.0.0:3306->3306/tcp, 33060/tcp mymysql
b4ca73d45d20 phpmyadmin/phpmyadmin "/run.sh phpmyadmin" 4 weeks ago Exited (0) 3 weeks ago phpmyadmin
あなたは私が名前javaappを持ついくつかの画像を持っていることがわかります。だから、私は殺して "javaapp:latest"コンテナーのすべてのコンテナーを削除します。
Sudo docker stop "containerName"
Sudo docker rm "containsrName"
それから
Sudo docker rmi -f "imageId"
だから私は"<none>"
という名前のすべての画像を削除することができます
がんばろう
# docker rm $(docker ps -aq)
その後、Nguyenが提案したようにコマンドを使用します。
私はこの問題を抱えていました、そして上の@tudorによって言及されたページでさえ、ここでの短い答えのどれもうまくいきませんでした。私はここで私がイメージを取り除く方法を共有すると思いました。従属イメージは親イメージのサイズ以上でなければならないというアイデアを思いつきました。
相関関係を見つけることができるかどうかを確認するために、サイズ順に画像をリストしました。
docker images --format '{{.Size}}\t{{.Repository}}\t{{.Tag}}\t{{.ID}}' | sort -h -r | column -t
これがすることは、最初に画像サイズの列を配置するためにdockerからの特別なフォーマットを使用し、それから人間が読める形式のソートを逆の順序で実行することです。それから読みやすい列を復元します。
それから私は<none>
コンテナを見て、リストの最初のコンテナを同じサイズで一致させました。私はその画像に簡単なdocker rmi <image:tag>
を実行しました、そしてすべての<none>
子画像はそれと一緒に行きました。
私が最初にdockerで遊び始めたとき、すべての子の画像の問題の画像は実際にはいまいましいmyrepo/getstarted-lab
私が使った画像 でした。チェーンを作成した最初のテストイメージから新しいイメージを作成したためです。
うまくいけば、それはある時点で他の誰かに役立ちます。
私もこの問題を抱えていました、私は以下のコマンドで問題を解決することができました。これが原因である可能性があります。画像のコンテナが実行中または終了しているため、画像を削除する前にコンテナを削除する必要があります。
docker ps -a -f status = exited:このコマンドは終了したコンテナをすべて表示するので、コンテナIDをコピーしてから以下のコマンドを実行してコンテナを削除します。
docker rm #containerId:このコマンドはコンテナを削除しますこれは「画像に従属する子画像がある」という言及が問題になるかもしれません
次に、下記のコマンドで画像を削除してみてください
docker rmi #ImageId
Dockerfileがあるとします。
FROM ubuntu:trusty
CMD ping localhost
タグやネーミングなしでそこから画像を構築
docker build .
これで、成功レポート「Successfully built 57ca5ce94d04」が表示されます。dockerの画像を見ると
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 57ca5ce94d04 18 seconds ago 188MB
ubuntu trusty 8789038981bc 11 days ago 188MB
まずdocker rmi 57ca5ce94d04
を削除する必要があります
に続く
docker rmi 8789038981bc
その画像によって削除されます!
誰かが示唆しているように、すべてを強制的に削除する
docker rmi $(docker images -q) -f
Image Layer:リポジトリは、しばしばイメージまたはコンテナイメージと呼ばれますが、実際には1つ以上のレイヤーで構成されています。リポジトリ内の画像レイヤーは、親子関係で互いに接続されています。各画像レイヤーは、それ自体と親レイヤーの間の変更を表します。
Docker buildingパターンは継承を使います。これは、バージョンi
がバージョンi-1
に依存していることを意味します。そのため、バージョンi
を削除できるようにするには、バージョンi+1
を削除する必要があります。これは単純な依存関係です。
最後の画像(最も更新されたもの)と最初の画像(基本)以外のすべての画像を削除したい場合は、以下のようにdocker save
コマンドを使用して最後の画像(最も更新されたもの)をエクスポートできます。
docker save -o <output_file> <your_image-id> | gzip <output_file>.tgz
それでは、下のようにimage-idを使ってすべての画像を削除します。
docker rm -f <image-id i> | docker rm -f <image i-1> | docker rm -f <image-id i-2> ... <docker rm -f <image-id i-k> # where i-k = 1
では、保存したtgz画像を以下のようにロードしてください。
gzip -c <output_file.tgz> | docker load
docker ps -qを使用して、ロードしたイメージのイメージIDを確認してください。タグと名前はありません。下記のように単にタグと名前を更新することができます。
docker tag <image_id> group_name/name:tag
あなたはこれをすることができます:
➜〜須藤ドッキングウィンドウRMI 4ed13257bb55 -f削除:SHA256:4ed13257bb5512b975b316ef482592482ca54018a7728ea1fc387e873a68c358削除:SHA256:4a478ca02e8d2336595dcbed9c4ce034cd15f01229733e7d93a83fbb3a9026d3削除された:SHA256:96df41d1ce6065cf75d05873fb1f9ea9fed0ca86addcfcec7722200ed3484c69削除:SHA256:d95efe864c7096c38757b80fddad12819fffd68ac3cc73333ebffaa42385fded
画像のリストを強制的に削除します(たとえば、バージョン10を除く)
港湾労働者画像| grepバージョンgrep -v version10> images.txt && in $(awk -F "" '{print $ 3}' /root/images.txt) docker rmi -f $ img;を実行します。終わった
@ Nguyenによって提供された答えを拡張して - この関数はあなたの.bashrc
などに追加され、それからどんなエラーも片付けるのを助けるためにコマンドラインから呼ばれることができますimage has dependent child images
エラー...
あなたは自分自身で関数を実行することができます、そして、docker ps
が失敗するならば、それはdocker
でSudo
コマンドを実行して、あなたにあなたのパスワードを促します。
NOT実行中のコンテナの画像を削除します。
docker_rmi_dependants ()
{
DOCKER=docker
[ docker ps >/dev/null 2>&1 ] || DOCKER="Sudo docker"
echo "Docker: ${DOCKER}"
for n in $(${DOCKER} images | awk '$2 == "<none>" {print $3}');
do
echo "ImageID: $n";
${DOCKER} inspect --format='{{.Id}} {{.Parent}}' $(${DOCKER} images --filter since=$n -q);
done;
${DOCKER} rmi $(${DOCKER} images | awk '$2 == "<none>" {print $3}')
}
.bashrc
ファイルにもあります。
docker_rm_dangling ()
{
DOCKER=docker
[ docker ps >/dev/null 2>&1 ] || DOCKER="Sudo docker"
echo "Docker: ${DOCKER}"
${DOCKER} images -f dangling=true 2>&1 > /dev/null && YES=$?;
if [ $YES -eq 1 ]; then
read -t 30 -p "Press ENTER to remove, or CTRL-C to quit.";
${DOCKER} rmi $(${DOCKER} images -f dangling=true -q);
else
echo "Nothing to do... all groovy!";
fi
}
で動作します:
$ docker --version
Docker version 17.05.0-ce, build 89658be