ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Error response from daemon: conflict: unable to delete - image has dependent child images
    Computer Science/개발 2024. 7. 9. 10:16
    반응형

    Error response from daemon: conflict: unable to delete '이미지 ID' (cannot be forced) - image has dependent child images

     

     

    도커를 이미지 ID로 삭제하려고 하면 dependent한 container를 다 삭제해주었다고 하더라도 위 오류가 발생할 수 있다. 

    그 이유는 Image의 ID만을 특정하게 되면, 보이지 않지만 그 ID에 의존하고 있는 (다른 태그를 가진) 이미지가 존재하기 때문이다.

     

     

    특정 이미지가 다른 이미지에 의해 사용되고 있는 경우, 이를 자식 이미지가 부모 이미지를 의존한다고 한다. 이 의존성 때문에, 부모 이미지를 제거하면 자식 이미지가 깨질 수 있다. 따라서 도커는 이런 경우 부모 이미지를 쉽게 제거할 수 없도록 막아 놓았다.

     

    도커 이미지는 고유의 ID와 여러 개의 Tag를 가질 수 있다. 예를 들어, 하나의 ID를 가진 이미지가 두 개 이상의 태그를 동시에 가질 수 있다. 만약 어떤 이미지가 python:3.8 이라는 소스 이미지를 기반으로 만들어졌다면 이 이미지는 python:3.8의 자식 이미지가 된다.  ----> (image has dependent child images)

     

    이미지를 제거할 때 발생하는 의존성 문제는 이미지의 계층 구조와 다중 태그 체계에서 비롯된다. 특정 이미지가 다른 이미지의 기반이 되는 경우, 해당 이미지를 제거하면 자식 이미지들이 영향을 받기 때문에 도커는 이를 방지한다.

    따라서 이미지를 제거할 때는 ID 대신 이미지의 이름과 태그를 사용해서 제거해야 한다. 

     

    정리하면, 하나의 이미지가 여러 개의 태그를 가질 수 있기 때문에, 이 경우 이미지 ID만을 사용하여 이미지를 삭제하면 해당 이미지의 모든 태그가 삭제된다. 만약 어떤 이미지를 기반으로 다른 이미지가 만들어졌다면 (소스 이미지를 run하고 새로 commit을 했을 때) 계층 구조 때문에 삭제를 강제할 수 없다. 따라서 이미지의 Tag를 특정해주어 해당 ID에 대한 의존성을 가진 자식 이미지가 있더라도 그것은 남겨두고 원하는 이미지만 삭제하도록 하는 것이다. 

     

     

    docker rmi ImageName:Tag

     

     

Designed by Tistory.