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
먼저 다음 명령을 사용하여 모든 컨테이너를 제거하십시오.
sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
그런 다음 다음 명령을 사용하여 ID로 이미지를 제거하십시오.
sudo docker rmi <image-id>
Sunny의 답변 외에도
PowerShell 창에서 Windows 시스템 (Docker for Windows)의 모든 이미지 를 삭제하려면 다음을 수행하십시오.
docker images -q | %{docker rmi -f $_}
PowerShell 창에서 Windows 시스템 (Docker for Windows)의 모든 컨테이너 를 삭제하려면 다음을 수행하십시오.
docker ps -a -q | %{docker rm -f $_}
해당 이미지에서 생성 된 모든 불필요한 컨테이너를 먼저 중지 / 삭제해야합니다.
살펴보기 : 오래된 Docker 컨테이너를 제거하는 방법 .
그 후 @marcell 솔루션을 사용하십시오.
모든 용기를 제거하십시오
docker ps -q -a | xargs docker rm
모든 Docker 이미지를 강제로 제거하십시오.
docker rmi -f $(docker images -f dangling=true -q)
간단히 --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입니다.
태그없는 이미지를 모두 제거하는 가장 간단한 버전의 명령은 다음과 같습니다.
docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')
사용하다
docker image prune -all
또는
docker image prune -a
매달려있는 이미지를 모두 제거하십시오. 경우 -a
지정, 그것은 또한 모든 컨테이너에 의해 참조되는 모든 이미지를 제거합니다.
참고 : 제거가 제거하기 전에 확인을 요청하는 메시지가 표시되지만 제거 될 수있는 항목의 목록은 표시되지 않습니다. 또한 docker image ls
네거티브 필터링을 지원하지 않으므로 실제로 제거 할 이미지를 예측하기가 어렵습니다.
prune에 대한 Docker의 설명서에 명시된 바와 같이 .
일부 Docker 이미지를 삭제하려면 다음 명령을 실행해야합니다.
$ docker rmi <docker_image_id>
따라서 모든 Docker 이미지를 삭제하려면 다음 명령을 실행할 수 있습니다.
$ docker rmi $(docker images -q)
이제 모든 Docker 이미지 (사용중인 이미지 포함)를 삭제하려면 다음과 같이 플래그를 추가 할 수 있습니다 -f
.
$ docker rmi -f $(docker images -q)
종료 된 컨테이너를 자동 / 주기적으로 정리하고 실행중인 컨테이너에서 사용하지 않는 이미지와 볼륨을 제거하려면 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
Powershell 스크립트로 나를 위해 해결책을 찾았습니다.
스크립트는 처음에 모든 컨테이너를 중지 한 다음 모든 컨테이너를 제거한 다음 사용자가 지정한 이미지를 제거합니다.
여기 http://www.devcode4.com/article/powershell-remove-docker-containers-and-images를보십시오
참고 URL : https://stackoverflow.com/questions/21398087/how-can-i-delete-dockers-images
'Programing' 카테고리의 다른 글
연관 배열 키 목록 가져 오기 (0) | 2020.04.02 |
---|---|
텍스트 파일에서 줄 끝을 찾는 방법은 무엇입니까? (0) | 2020.04.02 |
쉘 스크립트에 전달 된 마지막 인수 얻기 (0) | 2020.04.02 |
프로그래밍 방식으로 TextView에서 왼쪽 드로어 블을 설정 (0) | 2020.04.02 |
JavaScript에서 정수를 이진수로 변환하는 방법은 무엇입니까? (0) | 2020.04.02 |