source

이름을 기준으로 도커 이미지를 제거하는 방법은?

factcode 2023. 10. 31. 22:55
반응형

이름을 기준으로 도커 이미지를 제거하는 방법은?

지정된 문자열이 포함된 이름을 가진 모든 버전의 도커 이미지를 삭제합니다(imagename).
아래를 시도해 보았지만 작동하지 않는 것 같습니다.

docker images | grep 'imagename' | xargs -I {} docker rmi

다음을 시도해 봅니다.

docker rmi $(docker images | grep 'imagename')

또는 다음과 같이 할 수 있습니다.

docker rmi $(docker images 'completeimagename' -a -q)

Windows PowerShell에서:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")

조금 더 정확한 버전 - 저장소 이름에 대한 grepping only:

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

docker images실제로 필터링할 이미지 이름/id로 첫 번째 위치 인수를 사용합니다.grep과 awk는 필요없어요.-q옵션은 다음으로 공급할 수 있는 일치하는 이미지 ID만 반환합니다.docker rmi.

docker rmi --force $(docker images -q 'imagename' | uniq)

uniq동일한 이미지에 다른 태그가 지정된 경우 중복을 제거하기 위해 필요합니다.

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

간단히 추가할 수 있습니다.--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은 첫 번째 열(즉, 도커 컨테이너 ID)이고 $3은 세 번째 열(즉, 도커 이미지 ID)입니다.

저는 제 대답이 더 간단하다고 생각합니다.

예를 들어, 이미지 이름은python_image.

그렇다면 코드는 다음과 같습니다.

docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")

도움이 되었으면 좋겠습니다.

작업한 경우(Docker 버전 19.03.5):

docker rmi $(docker images 'imagename' -q)

"docker images 'imagename' -q" 명령은 따옴표로 묶은 단일 인수의 모든 이미지 ID를 나열하므로 docker rmi(또는 강제로 사용하는 경우 docker rmi -f)와 연결하면 선택한 이름의 모든 이미지가 제거됩니다.

저는 또 다른 간결한 답변을 받았습니다.유일한 변화는 불필요한 것들을 제거하는 것이었습니다.-I {}깃발을 올리다

docker images | grep 'imagename' | xargs docker rmi

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 | 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 images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}'중요한 부분입니다.세 번째 열에서 id를 추출합니다.

docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )

이전에 게시되지 않은 이 질문에 대한 해결책을 제시해 보십시오.

현지에서 제작한 이미지를 일치시키고 싶었습니다.library/myapp이름을 바꾸고 태그를 지정하고 비공개 레포로 밀어 넣었습니다.myrepo.org/library/myapp. 일단 그들이 밀리면, 나는 그 지역 도커 레그를 치우고 싶습니다.

아무것도 발견되지 않거나 명령이 오류를 내던져도 상관없습니다.이렇게 추가된|| true스크립트에 포함시키기 위해 마지막에.

docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true

이것을 시도해 보십시오.

docker images | grep 'DOCKER_IMAGE_NAME' | xargs -l bash -c 'docker rmi $0:$1' | xargs
docker image ls | grep 'repository-name' |  awk '{ print $3 }'  | while read -r line ; do docker image rm $line; done

이것은 현재 저에게 효과가 있습니다.

docker rmi $(docker images |  awk '{if ($1 ~ "^image_prefix") print $1":"$2}')

사소한 언급: 우리가 경험한 바로는, 당신은 도커 18.03 이후로 더 이상 이름만으로 태그가 지정되지 않은 이미지를 제거할 수 없는 것 같습니다.위와 같이 name+tag를 사용하시거나 ID를 사용하셔야 합니다.

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'

@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>

image 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`

선호하는 답변에 따라 대신 변수를 사용합니다.

docker rmi --force "$(docker images -q $repository | uniq)"

그리고 이것은 젠킨스 파이프라인에 사용될 수 있습니다.

sh(script: 'docker rmi --force "$(docker images -q $repository | uniq)"', returnStdout: true)

태그를 통해 제거하는 대신 이 옵션을 선호했습니다.

$ docker rmi test:latest

이것은 문서가 말하고 제가 확인한 바와 같이, "태그와 함께명령을 매개 변수로 사용하면 태그만 제거됩니다. 이미지에 대한 태그만 있는 경우 이미지와 태그가 모두 제거됩니다."

마침내, 이것은 나에게 효과가 있었습니다.

셸: 도커 이미지 --형식 {% raw %}'{{.아이디}} - {{.리포지토리}}'{%endraw%} | grep {{app_name}} | cut -d'- -f1 | xargs docker rmi -f

{{ app_name}}은(는) 도커 이미지 이름의 정규 표현입니다.

저는 윈도우 사용자입니다, Jenkins 안에 bat로 위 솔루션을 수정해 보았습니다.오류가 나서 도움이 필요합니다.

cmd 안에서 수동으로 할 수 있습니다.

for /F "tokens=3" %a in ('docker images ^| findstr "my_image" ') do docker rmi %a

그러나 IMAGE_NAME = my_image로 Jenkins 파일 안에 구현했습니다.

bat " for /f \"tokens=3\" %%a in ('docker images ^^^| findstr \"${IMAGE_NAME}\" ') do docker rmi %%a "

내 젠킨스 노드 안에서 그것은

C:\Program Files\jenkins\workspace\my_image>for /F "tokens=3" %a in ('docker images ^| findstr "my_image" ') do docker rmi %a

번역은 매뉴얼 타입과 동일해서 괜찮아 보입니다.하지만 젠킨스의 결과는

"docker images" requires at most 1 argument.

'docker images --help'를 참조하십시오.

젠킨스 파일에서는 작동하지 않으면서 수동으로 작동하는 이유를 알고 있습니까?젠킨스가 findstr을 실행하지 않았다는 느낌이 듭니다.누군가가 무엇이 문제인지 지적해주면 좋을 것 같습니다.

로컬에서 이미지를 제거하기 위해 follow 명령을 사용했습니다. 작동했습니다!!

docker rmi imagename

이미지 이름을 하나의 인용문으로 사용했을 때는 효과가 없었습니다.

언급URL : https://stackoverflow.com/questions/40084044/how-to-remove-docker-images-based-on-name

반응형