Docker에서 이미지를 어떻게 제거합니까?


840

OS X 10.8.4 (Mountain Lion)의 Vagrant에서 Docker를 실행 중이며 저장된 이미지를 삭제하려고 할 때마다 오류가 발생합니다.

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

rmi도움 에 따르면 올바른 구문은 docker rmi IMAGE [IMAGE...]입니다. 어떻게해야할지 모르겠습니다.

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

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

흥미롭게도을 실행할 때 docker ps컨테이너가 전혀 표시되지 않습니다. Running docker images은 4 개의 base이미지와 1 개의 이미지를 보여줍니다 node.


1
어떤 버전의 도커를 사용하고 있습니까? 'docker version'및 'docker info'의 출력을 붙여 넣을 수 있습니까? 방금 master와 함께 시도했지만 정상적으로 작동했습니다.
creack

해당 정보로 질문을 업데이트했습니다.
Jules

1
docker info실제 이미지 양을 보여 ./docker images -a -q | sort | uniq | wc -l주므로 동일한 결과 (-모든 이미지의 경우 a, ID의 경우 -q)이어야합니다. docker ps활성 컨테이너 만 표시 docker ps -a합니다. 모든 컨테이너를 나열 할 수 있습니다
creack

-D옵션과 클라이언트로 도커 데몬을 시작할 수 있습니까 ? docker -d -D& ; docker -D rmi <id>. 시도해 볼 수 있습니까 CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
creack

4
이 풀 요청을 살펴보십시오 : github.com/dotcloud/docker/pull/1225
creack

답변:


1013

시도하십시오 docker rmi node. 작동합니다.

생성 된 모든 컨테이너를 보는 것은 간단합니다 docker ps -a.

이미지가 아닌 기존 컨테이너를 모두 제거하려면 다음을 실행하십시오. docker rm $(docker ps -aq)


13
일부 컨테이너가 여전히 실행 중이면 docker stop $ (docker ps -qa)를 실행하여 모든 컨테이너를 중지 할 수 있습니다. 실행중인 컨테이너를 제거하면 작동하지 않을 수 있다고 생각합니다. 적어도 이것에 문제가 있음을 기억합니다. 나는 그녀가 틀렸을 수도있다. 나는 맨 페이지를 점검했고 그것은 내 가설을지지한다 : "-f, --force = true | false 실행중인 컨테이너를 강제로 제거한다. 기본값은 false이다."
Konrad Kleine

1
아, "기존 컨테이너 모두 제거"명령에 대해 몰랐습니다. 자체적으로 작성해야 함 : docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g'| sed -r 's / ^ CONTAINER //'| sed -r 's / ^ (\ w +) / docker rm \ 1 / g'| awk 'system ($ 0)'감사합니다!
Anurag

4
쉘 기능을 사용하여 기본 기능을 사용해야하는 경우 명령 행 옵션이 잘못 설계되었습니다.
user3467349 2016 년

기존의 모든 이미지를 제거하려면- "docker rmi $ (docker images -q)"
human

Windows docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
Powershell을

565

다음은 도커 이미지 / 컨테이너를 제거하는 몇 가지 방법입니다.

단일 이미지 제거

docker rmi image_name:version/image-id

모든 이미지 제거

docker rmi $(docker images -qf "dangling=true")

용기를 제거하고 제거하십시오.

docker rm $(docker kill $(docker ps -aq))

참고 : 교체 killstop정상적으로 종료에 대한

"my-image"를 제외한 모든 이미지 제거

grep을 사용 my-image하여ubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

또는 (awk없이)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))


25
추가 : "매달린"이미지 제거 (태그가없는 이미지) :docker rmi $(docker images -qf "dangling=true")
kolypto

5
shoudl bedocker rm $(docker kill $(docker ps -a -q))
BMW

1
awk없이 "제외한 것을 모두 제거":docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie

1
@kolypto "dangling = true"는 매달려 있지 않은 컨테이너를 삭제하지 않는 것으로 보입니다. 나머지를 제거하려면 -f 및 dangling 플래그를 빼고 다시 실행하십시오.
DougW

1
그것은 단지 나입니까, 아니면 마지막 제안 (또는 awk없이) 실제로 작동하지 않습니까?
Mike Wise

196

모든 도커 컨테이너 삭제

docker rm $(docker ps -a -q)

모든 도커 이미지 삭제

docker rmi $(docker images -q)

7
태그가없는 이미지 제거 :docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark

1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") 다음과 2015 년의 (예를 라이브 릴리스 태그를 제거하기 위해 live-20150121223우리가 할 수있는) sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
equivalent8

그것을 강제로 쓰려면, docker -f rm $ (docker ps -a -q)
Adrian Lopez

71

이미지 ID를 사용하여 Docker에서 이미지를 제거하려면

  1. 모든 이미지 목록 가져 오기

    docker images
    
  2. 삭제하려는 이미지의 이미지 ID를 식별하십시오 (예 :

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. 마지막으로 이미지 ID를 사용하여 이미지를 제거하십시오 (처음 세 자리 만 필요합니다)

    docker rmi 08d
    

1
먼저 컨테이너를 중지하고 제거해야합니다. stackoverflow.com/questions/21398087/…
vikramvi

37

영상:

  1. 이미지 목록

    도커 이미지

  2. 하나의 이미지 제거

    도커 rmi image_name

  3. 하나의 이미지를 강제로 제거

    도커 rmi -f image_name

컨테이너:

  1. 모든 컨테이너 목록

    도커 ps -a

  2. 하나의 용기를 제거

    도커 rm container_id

  3. 하나의 컨테이너를 강제로 제거

    도커 rm -f container_id


29

VonC가 이전 Docker 컨테이너를 제거하는 방법에 설명 된대로 업데이트 하십시오 .

Docker 1.13 (2016 년 4 분기)을 사용하면 다음이 가능합니다.

docker system prune 사용하지 않는 모든 데이터를 삭제합니다 (예 : 컨테이너가 중지되고 컨테이너가없는 볼륨 및 컨테이너가없는 이미지).

PR 26108commit 86de7c0을 참조 하면 Docker 데몬 데이터가 디스크에서 차지하는 공간을 시각화하고 "필요하지 않은"초과 량을 쉽게 정리할 수 있도록 몇 가지 새로운 명령이 도입되었습니다.

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

철저한 답변에 감사드립니다. 그러나 이것은 원래의 질문 (이미 답변 된 답변과 여전히 가장 중요한 답변)에 직접 답변하지는 않습니다.
Jules

2
동의한다. 그러나이 질문의 제목은 매우 일반적이기 때문에 일종의 참조 질문이되어 메커니즘에 대한 업데이트를 제공한다고 생각했습니다.
qkrijger

24

컨테이너 제거

  1. 특정 컨테이너를 제거하려면

    docker rm CONTAINER_ID CONTAINER_ID
    
    • 단일 이미지

      docker rm  70c0e19168cf
      
    • 여러 이미지

      docker rm  70c0e19168cf c2ce80b62174
      
  2. 배출 된 용기 제거

    docker ps -a -f status=exited
    
  3. 모든 용기를 제거하십시오

    docker ps -q -a | xargs docker rm
    


이미지 제거

docker rmi IMAGE_ID
  1. 특정 이미지 제거

    • 단일 이미지

      docker rmi ubuntu
      
    • 여러 이미지

      docker rmi ubuntu alpine
      
  2. 매달려있는 이미지 제거 매달려있는 이미지
    는 Docker 이미지가 여러 개의 이미지로 구성되어 있기 때문에 태그가있는 이미지와 관련이없는 레이어입니다.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. 모든 Docker 이미지 제거

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

볼륨 제거

볼륨을 나열하려면 다음을 실행하십시오. docker volume ls

  1. 특정 음량 제거

    docker volume rm VOLUME_NAME
    
  2. 매달려있는 볼륨 제거

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. 컨테이너와 그 볼륨을 제거

    docker rm -v CONTAINER_NAME
    

왜 두 배 CONTAINER_ID입니까?
피터 Mortensen

19

docker rm container_name

docker rmi image_name

docker help

rm 하나 이상의 용기 제거

rmi 하나 이상의 이미지 제거


감사합니다. 그러나이 질문에는 이미 몇 가지 답변과 선택된 답변이 있으며 거의 ​​3 년 전에 문제를 해결했습니다.
Jules

13
docker rmi  91c95931e552

컨테이너 76068d66b290이 사용 중이므로 데몬으로부터의 오류 응답 : 충돌, 91c95931e552를 삭제할 수 없음 -f를 사용하여 FATA [0000]을 강제 실행하십시오. 오류 : 하나 이상의 이미지를 제거하지 못했습니다.

컨테이너 ID 찾기

# docker ps -a

# docker rm  daf644660736 

그 질문에 대한 대답입니까?
피터 Mortensen

daf644660736? 이전과 어떤 관련이 있습니까?
피터 Mortensen

5

먼저 제거하려는 Docker 이미지와 함께 첨부 된 Docker 컨테이너를 중지하고 제거해야합니다.

그래서 먼저

  • docker stop container-id -실행중인 컨테이너를 중지하려면
  • docker rm container-id -컨테이너를 삭제 / 제거하려면

그때,

  • docker rmi image-id -이미지를 삭제 / 제거하려면

3

버전 1.13 이상 :

docker image rm [OPTIONS] IMAGE [IMAGE...]

비교 :

[OPTIONS]차이가없는 것 같다.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

보낸 사람 : Docker 1.13 소개

CLI 재구성

Docker 1.13에서는 모든 명령을 다시 그룹화하여 상호 작용하는 논리 객체 아래에 놓습니다. 예를 들어, list그리고 start컨테이너의 현재의 하위 명령 docker containerhistory의 부속이다 docker image.

이러한 변경으로 Docker CLI 구문을 정리하고 도움말 텍스트를 개선하며 Docker를보다 간단하게 사용할 수 있습니다. 이전 명령 구문은 계속 지원되지만 모든 사용자가 새로운 구문을 채택하도록 권장합니다 .


3

Docker는 일부 제거 명령을 제공합니다 images.

표시 / 제거 Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

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

또한 filter매개 변수를 사용 하여 한 번에 이미지 세트를 제거 할 수도 있습니다 .

예:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

따라서 다음과 같이 해당 필터 이미지를 삭제할 수 있습니다.

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

1

사용하여 모두 삭제

1 단계 : 모든 컨테이너 제거

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

2 단계 : 먼저 RM

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

3 단계 : 강제로 이미지 삭제

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

하위 종속성으로 인해 삭제할 수 없다는 오류가 발생하는 경우 1 단계를 사용하십시오.


1

종료 된 컨테이너를 자동 / 정기적으로 정리하고 실행중인 컨테이너에서 사용하지 않는 이미지와 볼륨을 제거하려면 이미지를 다운로드 할 수 있습니다 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


1

다음은 태그가 지정된 (이름이 지정된) 이미지와 컨테이너를 제거하는 셸 스크립트입니다. docker-rmi로 저장하고 'docker-rmi my-image-name'을 사용하여 실행하십시오.

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE

xargs -r일치하지 않는 컨테이너 케이스에서 작동하도록 해야 합니다.
as.

0

왜 아무도 언급하지 않았습니다 docker-compose! 방금 일주일 동안 사용해 왔는데 없이는 살아남을 수 없습니다. 공부하기 위해 몇 분 밖에 걸리지 않는 yml을 작성하기 만하면됩니다. 이미지, 컨테이너 (소위 서비스에 필요함)를 부팅하고 docker 기본 명령에서 사용하는 것처럼 로그를 검토 할 수 있습니다. 시도해보십시오 :

docker-compose up -d
docker-compose down --rmi 'local'

docker-compose를 사용하기 전에 자체 쉘 스크립트를 작성한 다음 특히 응용 프로그램 아키텍처가 변경 될 때마다 필요할 때마다 스크립트를 사용자 정의해야했습니다. 이제 docker-compose 덕분에 더 이상이 작업을 수행 할 필요가 없습니다.


docker-compose오케스트레이션 도구이며 종종 간단한 프로젝트에 사용하기에는 실용적이지 않습니다. 이 질문의 맥락에서 독립형 docker솔루션 (종종 빈번한 docker-compose.yml구성을 사용하지 않아도 됨 )이 바람직합니다. 또한 여기에는 이미 많은 좋은 답변이 있습니다.
Jules

@Jules는 docker-compose를 언급 한 사람이 나쁜 답변을 의미하지 않으며 이것이 무력한 답변임을 의미하지는 않습니다. Docker 기본 명령은 나쁘지는 않지만 지루하며 매번 많은 타이핑이 필요합니다. "하나는 좋고 두개는 너무 많다".
Tiina

-1

나를 위해 다음이 잘 작동했습니다.

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

그런 다음 다음과 같이 실행하여 이미지를 제거하십시오.

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

-1

이미지 목록 :

ahanjura@ubuntu:~$ sudo docker images

리포지토리 태그 이미지 이미지 생성 크기 88282f8eda00 19 초 전 308.5 MB 13e5d3d682f4 19 시간 전 663 MB busybox2 최신 05fe66bb1144 20 시간 전 1.129MB 우분투 16.04 00fd29ccc6f1 5 일 전 110.5 MB 우분투 14.04 67759a80360c 5 일 전 680.7 MB 93.690 93.530 busybox latest 6ad733544a63 6 주 전 1.129 MB 우분투 16.10 7d3f705d307c 5 달 전 106.7 MB

이미지 삭제 :

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

삭제 : SHA256 : 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 삭제 : SHA256 : 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 삭제 : SHA256 : 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 삭제 : SHA256 : b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

데몬의 오류 응답 : 충돌 : 13e5d3d682f4를 삭제할 수 없습니다 (강제해야 함)-중지 된 컨테이너에서 이미지를 사용하고 있습니다 5593e25eb638

강제 삭제 :

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

삭제 : SHA256 : 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e 삭제 : SHA256 : 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 삭제 : SHA256 : 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af 삭제 : SHA256 : 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

제 경우에는 문제는 이름이나 ID 뒤에 태그를 추가하는 것과 같은 이름의 이미지를 견인해야한다는 것입니다.

sudo docker rmi <NAME>:<TAG>

전의:

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