-
Error response from daemon: conflict: unable to delete - image has dependent child imagesComputer 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
'Computer Science > 개발' 카테고리의 다른 글
git 충돌 발생 해결법 (0) 2024.10.26 로컬 프로젝트 GitHub에 올리는 방법 (0) 2024.10.25 VSCode에서 Docker Container에 Remote로 연결하기 (0) 2024.06.06 Docker 설치부터 이미지 빌드, 실행까지 🐊 (0) 2024.06.06