주어진 문자열 ( imagename
) 이 포함 된 이름을 가진 모든 버전의 도커 이미지를 삭제하고 싶습니다 .
아래를 시도했지만 작동하지 않는 것 같습니다.
docker images | grep 'imagename' | xargs -I {} docker rmi
답변:
다음을 시도하십시오.
docker rmi $(docker images |grep 'imagename')
Windows Powershell :
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
출력을 필터링하므로 repo 및 태그 만 표시됩니다 (예 :) foo:latest
. grep 'imagename
해당 행을 포함하는 이미지로만 필터링합니다 imagename
. 그것을 넣는 것은 $()
& docker rmi
일치 된 이미지를 제거하는 외부로 전달되는 것을 평가합니다 .
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
실제로 필터링 할 이미지 이름으로 첫 번째 위치 인수를 사용합니다. grep 및 awk가 필요하지 않습니다. 그만큼-q
옵션은에 공급할 수있는 일치하는 이미지 ID 만 반환합니다 docker rmi
.
docker rmi --force $(docker images -q 'imagename' | uniq)
이 uniq
같은 이미지가 다르게 태그가있는 경우, 중복을 제거하기 위해 필요합니다.
간단히 --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 1 열, 즉 고정 표시기 컨테이너 ID이며, $ 3은 3 열, 즉 고정 표시기 이미지 ID입니다
내 대답이 더 간단하다고 생각합니다.
예를 들어, 이미지 이름은 python_image
입니다.
그러면 코드는 다음과 같아야합니다 .
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
이게 도움이 되길 바란다.
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
이렇게하면 "imageName"이라는 이름으로 모든 이미지가 제거됩니다. 경우에 따라 "이미지가 하나 이상의 저장소에서 참조 됨"과 같은 오류가 발생할 수 있습니다. 이 경우 강제 삭제를 사용하십시오.
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
다른 방법은 다음과 같습니다.
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
나를 위해 일했습니다 ( Docker 버전 19.03.5 ) :
docker rmi $(docker images 'imagename' -q)
" docker images 'imagename'-q " 명령 은 작은 따옴표로 묶인 인수의 모든 이미지 ID를 나열하므로이를 docker rmi (또는 강제를 위해 docker rmi -f) 와 연결하면 선택한 이름의 모든 이미지가 제거됩니다.
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
예를 들어 다음 이미지가있는 경우
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
그때 docker rmi $(docker images --filter=reference="abcd*:*4.0")
처음 4 개의 이미지를 제거합니다.
자세한 내용은 https://docs.docker.com/engine/reference/commandline/images/ 를 참조 하십시오.
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
이전에 게시되지 않은 내 요구 사항을 충족하기 위해이 질문에 대한 해결책을 모으십시오.
로컬에서 빌드 한 이미지를 일치시키고 싶었 library/myapp
습니다. 이름을 바꾸고 태그를 지정하고 개인 저장소로 푸시했습니다 myrepo.org/library/myapp
. 푸시되면 로컬 도커 레지스트리를 정리하고 싶습니다.
그리고 아무것도 발견되지 않거나 명령이 오류를 던지는 지 상관하지 않습니다. 따라서 || true
스크립트에 포함하기 위해 끝에 추가 됩니다.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
@Aditya의 답변에 따라 이미지를 쉽게 제거하는 bash 함수를 만들 수도 있습니다. 이 함수를 ~/.profile
. 새 셸 세션을 생성하거나 source ~/.profile
.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
용법:
drmi golang
정보 :
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
이 오류를 제공하십시오.
데몬의 오류 응답 : 잘못된 참조 형식
아마도 내 이미지가 다음과 같기 때문일 것입니다.
hostname:5000/imagename:<none>
이미지 ID를 사용하고 다음 명령을 수행해야했습니다.
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
종료 된 컨테이너를 제거하려면 :
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`