[docker] Docker의 이미지를 어떻게 삭제합니까?

다음 이미지가 있습니다 :

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

그리고 그중 하나를 제거하려고하면 다음과 같은 결과가 나타납니다.

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

어떻게 제거 할 수 있습니까? 왜 그런 갈등이 있습니까?



답변

모든 이미지를 삭제하려면 주어진 명령을 사용하십시오

docker rmi $(docker images -q)

모든 컨테이너를 삭제하려면 주어진 명령을 사용하십시오.

docker rm $(docker ps -a -q)

경고 : 이렇게하면 모든 이미지와 컨테이너가 손상됩니다. 복원 할 수 없습니다!

이 솔루션은 Techoverflow.net에서 제공합니다 .


답변

가능한 이유 :
이 이미지는 현재 실행중인 컨테이너에서 사용 중일 수 있습니다. 이 경우 실행중인 컨테이너를 나열하고 관련 컨테이너를 중지 한 다음 이미지를 제거 할 수 있습니다.

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

docker ps로 컨테이너를 찾을 수없는 경우이를 사용하여 이미 종료 된 모든 컨테이너를 나열하고 제거 할 수 있습니다.

docker ps -a | grep 60afe4036d97
docker rm <containerid>

참고 : 컨테이너를 사용하는 경우 종료 된 모든 컨테이너를 한 번에 삭제하는 데 주의하십시오Volume-Only . 이들은 Exit상태를 유지 하지만 유용한 데이터를 포함합니다 .


답변

오류의 원인은 이미지에 태그가 없더라도 해당 이미지에 exited상태 가있을 수있는 컨테이너가 여전히 존재하기 때문 입니다. 따라서 해당 이미지에서 작성된 모든 컨테이너를 중지하고 삭제했는지 확인해야합니다. 다음 명령은 실행 중이 아닌 모든 컨테이너를 제거하는 데 도움이됩니다.

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

이제 이것은 매달린 비 중간 <none>이미지를 모두 제거합니다 .

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

참고 : 실행중인 모든 컨테이너를 중지하려면 다음을 수행하십시오.

docker stop `docker ps -q`

답변

이미지는 현재 실행중인 컨테이너에서 사용할 수 있으므로 먼저 컨테이너를 중지하고 제거해야합니다.

docker stop <container-name>
docker rm <container-id>

그런 다음 이미지를 삭제하십시오.

docker rmi <image-id>

이 이미지가 다른 이미지에 의존하지 않는지 확인해야합니다 (그렇지 않으면 먼저 삭제해야합니다).

컨테이너가 더 이상 존재하지 않는 이상한 사례가 docker ps -a있었지만 ( 아무 것도 반환하지 않았지만) 이미지와 이미지 종속성을 삭제할 수 없었습니다.

이러한 특별한 경우를 해결하려면 다음과 같이 이미지를 강제로 제거하십시오.

docker rmi -f <image-id>


답변

배쉬에서 :

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

“<없음>”이름을 가진 모든 이미지가 제거됩니다. 그 이미지가 중복 된 것을 발견했습니다.


답변

이 명령에서 답을 찾았습니다.

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

사용중인 일부 이미지를 삭제했는데 문제가 발생했습니다 (을 사용하여 docker ps -a).


답변

Docker ver.부터 1.13.0 (2017 년 1 월) system prune명령이 있습니다 :

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage