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


265

다음 이미지가 있습니다 :

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

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

답변:


478

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

docker rmi $(docker images -q)

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

docker rm $(docker ps -a -q)

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

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


17
간단하고 똑바로. 또한 이미지를 강제로 제거하라는 명령을 아래에 있습니다. 'docker rmi -f $ (docker images -q)'
dimuthu

37
창문은 동일 파워 쉘docker images -q | %{docker rmi -f $_}
BeatingToADifferentRobot

1
먼저 @muheed에서 cmd를 사용하여 응답 방법 ( stackoverflow.com/a/30475249/2747020 )을 사용하여 일부 이미지 제거를 잠금 해제했습니다.sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
Razec Luar

1
도커 컨테이너를위한 Windows Powershelldocker ps -a -q | %{docker rm -f $_}
Dexter

1
아래 @ alexyz78 메모와 같이 이제 사용할 수 있습니다 docker system prune. 그래서 everyhing 닦아 : docker kill $(docker ps -q)a로 다음 정지 컨테이너에 docker system prune -a모든 것을 제거합니다 - 볼 stackoverflow.com/a/44309011/247708
바랏

101

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

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

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

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

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


실제로,이를 지정하는 메시지가 나타납니다. 어쩌면 다른 이미지 가이 이미지를 기반으로합니까? 먼저이 이미지에서 만든 이미지를 모두 제거하십시오.
qkrijger

12
나는 sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm( github.com/dotcloud/docker/issues/3258 덕분에 ) 이미지를 제거하고sudo docker rmi 70c0e19168cf
alexyz78

2
Exit상태 에서 이미지를 삭제하는 데주의하십시오 . 데이터 볼륨 전용 컨테이너를 사용하는 경우 계속 실행되지 않습니다.
aceofspades

1
AWK는 grep을 할 수 있습니다 :awk '/Exit/ {print $1}'
드와이트 스펜서

당신의 명령은 이것을 던집니다 Error response from daemon: No such container: .... 무엇을 교체해야하는지, 무엇을 대체해야하는지 말하기는 어렵습니다. 사용하지 마십시오...
Felo Vilches

60

오류의 원인은 이미지에 태그가 없더라도 해당 이미지에 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`

1
이것에 감사합니다. 이것이 가장 깨끗한 구현이라는 것을 알았습니다.
Joseph Sawyer

7
"상태 = 종료"되었으므로 데이터 볼륨 컨테이너가있는 경우주의하십시오. 즉, 모든 데이터가 손실됩니다.
Johan

19

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

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

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

docker rmi <image-id>

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

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

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

docker rmi -f <image-id>

19

배쉬에서 :

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

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


3
이것은 질문에 대답하지 않지만 여전히 매우 유용합니다. 감사.
binwiederhier 2014 년

5
이 명령을 간단하게 docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi, 그것은해야 할 수 sudo있는 권한
래리 카이

15

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

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

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


9

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

7

Sunny의 답변 외에도

PowerShell 창에서 Windows 시스템 (Docker for Windows)의 모든 이미지삭제하려면 다음을 수행하십시오.

docker images -q | %{docker rmi -f $_}

PowerShell 창에서 Windows 시스템 (Docker for Windows)의 모든 컨테이너삭제하려면 다음을 수행하십시오.

docker ps -a -q | %{docker rm -f $_}

6

먼저 다음 명령을 사용하여 모든 컨테이너를 제거하십시오.

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

그런 다음 다음 명령을 사용하여 ID로 이미지를 제거하십시오.

sudo docker rmi <image-id>

이것이 실행중인 모든 Docker 컨테이너를 제거한다는 것이 명백하지 않은 경우 주목할 가치가 있습니다.
Michael Mior


4

모든 용기를 제거하십시오

docker ps -q -a | xargs docker rm

모든 Docker 이미지를 강제로 제거하십시오.

docker rmi -f $(docker images -f dangling=true -q)

4

--force명령의 끝에 간단히 추가 할 수 있습니다 . 처럼:

sudo docker rmi <docker_image_id> --force

보다 지능적으로 만들기 위해 다음 과 같이 추가 할 수 있습니다.

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

여기서 docker ps$ 1은 첫 번째 열, 즉 Docker 컨테이너 ID입니다.

그리고 docker images$ 3는 세 번째 열, 즉 Docker 이미지 ID입니다.


3

태그없는 이미지를 모두 제거하는 가장 간단한 버전의 명령은 다음과 같습니다.

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')

3

일부 Docker 이미지를 삭제하려면 다음 명령을 실행해야합니다.

$ docker rmi <docker_image_id>

따라서 모든 Docker 이미지를 삭제하려면 다음 명령을 실행할 수 있습니다.

$ docker rmi $(docker images -q)

이제 모든 Docker 이미지 (사용중인 이미지 포함)를 삭제하려면 다음과 같이 플래그를 추가 할 수 있습니다 -f.

$ docker rmi -f $(docker images -q)

3

사용하다

docker image prune -all

또는

docker image prune -a

매달려있는 이미지를 모두 제거하십시오. 경우 -a지정, 그것은 또한 모든 컨테이너에 의해 참조되는 모든 이미지를 제거합니다.

참고 : 제거가 제거하기 전에 확인을 요청하는 메시지가 표시되지만 제거 될 항목의 목록은 표시되지 않습니다. 게다가,docker image ls 네거티브 필터링을 지원하지 않으므로 실제로 제거 할 이미지를 예측하기가 어렵습니다.

prune에 대한 Docker의 설명서에 명시된 바와 같이 .


1

종료 된 컨테이너를 자동 / 주기적으로 정리하고 실행중인 컨테이너에서 사용하지 않는 이미지와 볼륨을 제거하려면 Docker 이미지를 다운로드 할 수 있습니다 meltwater/docker-cleanup.

그렇게하면 손으로 청소할 필요가 없습니다.

그냥 실행 :

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

30 분마다 (또는 DELAY_TIME = 1800 옵션을 사용하여 설정 한 시간마다) 실행되고 종료 된 컨테이너 및 이미지를 정리합니다.

자세한 내용은 https://github.com/meltwater/docker-cleanup/blob/master/README.md


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.