🚬

【docker】child imagesのせいでimageが消せなくてキレそうなあなたへ

2021/05/18に公開

結論

docker rmiでイメージを削除しようとすると、こんなエラーが出るときがある。
Error response from daemon: conflict: unable to delete <イメージのID> (cannot be forced) - image has dependent child images

そんなときはこれを使うのだ

rmiFromChild() {
  ids=$(docker images -q)
  childId=$(
    for i in ${ids}; do
      docker history $i | grep -q $1 && echo $i
    done | sort -u
  )
  docker rmi ${childId}
}

child image関係のもの全部削除したいせっかちさんはこちら(こちら未検証、多分いける)

rmiAllFromChild() {
  ids=$(docker images -q)
  for id in ${ids}; do
    childId=$(
      for i in ${ids}; do
        docker history $i | grep -q $id && echo $i
      done | sort -u
    )
    docker rmi ${childId}
  done
}

使い方

rmiFromChild イメージのID

もしくは

rmiAllFromChild

これだけで消えます。

Discussion