오래된 Docker 컨테이너를 제거하는 방법


1235

이 질문은 과도하고 비 실행중인 Docker 컨테이너에 대해 걱정해야합니까? .

오래된 컨테이너를 제거하는 방법이 궁금합니다. 는 docker rm 3e552code34a단일 하나를 제거 할 수 있습니다,하지만 난 이미 많이 있습니다. docker rm --help전체 또는 이미지 이름과 같은 선택 옵션을 제공하지 않습니다.

어쩌면 수동으로 쉽게 삭제할 수있는 컨테이너가 저장되어있는 디렉토리가 있습니까?


21
분리 된 도커 볼륨 정리도 고려해야합니다. 나는 종종 오래된 컨테이너와 오래된 이미지보다 훨씬 더 많은 공간을 소비한다는 것을 알았습니다. 분리 된 도커 볼륨을 제거하기위한 올바른 스크립트는 github.com/chadoe/docker-cleanup-volumes 에서 사용할 수 있습니다 .
Nemanja Trifunovic

아마 github.com/chadoe/docker-cleanup-volumes 가 도움이 될 수 있습니다.
Mihai8

또한 컨테이너를 임시로 만드는 플래그 docker run와 함께 사용 --rm하여 실행 후 모든 컨테이너 파일을 제거 할 수 있습니다.
Gordon

12
docker 1.13 (Q4 2016)을 사용하면 새로운 docker system prune명령을 고려할 수도 있습니다 . 아래 내 답변을 참조하십시오 .
VonC

1
도커 관리 도구 사용이 도구를 사용하여 Portainer 관리 할 수 ​​있습니다 . 도커를 all the old containers, non using volumes and images위한 간단한 관리 UI Please refer my update below on how to deploy the application
Anish Varghese

답변:


1460

Docker 1.13.x 부터 Docker 컨테이너 정리 를 사용할 수 있습니다 .

docker container prune

이렇게하면 중지 된 컨테이너가 모두 제거되고 모든 플랫폼에서 동일한 방식으로 작동해야합니다.

도있다 도커 시스템 자두는 :

docker system prune

하나의 명령으로 사용되지 않은 모든 컨테이너, 네트워크, 이미지 (댕글 링 및 참조되지 않은) 및 선택적으로 볼륨을 정리합니다.


이전 Docker 버전의 경우 Docker 명령을 다른 Unix 명령과 함께 묶어 필요한 것을 얻을 수 있습니다. 다음은 몇 주 된 오래된 컨테이너를 정리하는 방법에 대한 예입니다.

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

크레딧을 제공하기 위해 https://twitter.com/jpetazzo/status/347431091415703552의 예입니다 .


92
태그없는 이미지를 모두 제거하는 비슷한 명령 : docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
Mohan Raj

7
dockerfile에서 이미지를 빌드 할 때 @ MichelMüller를 -rm성공적으로 빌드 한 후 중간 컨테이너를 제거 하는 옵션을 지정할 수 있습니다 .
Freek Kalter

3
@ MichelMüller 이미지는 캐싱에 사용되므로 컨테이너를 제거해도 효과가 없습니다.
Ken Cochrane

7
이것을 위해 awk를 사용하려면 첫 번째 줄 때문에 오류없이 모든 중지 된 컨테이너를 rm으로하려면 다음 명령을 고려하십시오.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
masi

3
태그가없는 이미지를 제거하기 위해 업데이트 된 명령이어야합니다.docker rmi $(docker images -q -f dangling=true)
Ghjnut

626

내가 Guillaume J. Charmes에서 얻은 또 다른 방법 (기한이있는 신용) :

docker rm `docker ps --no-trunc -aq`

모든 용기를 우아한 방식으로 제거합니다.

Windows 용 Bartosz Bilicki의 경우 :

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

PowerShell의 경우 :

docker rm @(docker ps -aq)

Docker 1.13 (Q4 2016) 업데이트, VonC ( 이 스레드의 후반부 )에 기여 :

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

11
이것은 어떻게 든 나를 위해 docker ps -a -q | xargs docker rm작동 하지 않지만 작동합니다 (스도 필요)
FUD

86
무엇에 대해 docker rm $(docker ps -a -q)?
qkrijger

8
@ qkrijger, 이것은 bashism을 추가하는 것을 제외하고는 원래 답변에서 아무것도 변경하지 않습니다. 문제는 명령 줄 오버플로입니다. xargs 변종은 좋은 방법으로 처리합니다. 또한 id 충돌을 피하기 위해 docker ps에 --no-trunk를 추가합니다.
Ihor Kaharlichenko

8
데이터 전용 컨테이너를 사용하는 경우 해당 컨테이너도 제거됩니다.
Dzung Nguyen

4
어쨌든 완전한 ID가 필요하지 않기 --no-trunc때문에 요점을 알 수 없습니다 docker rm.
Pithikos

411

대답 업데이트 사용 docker system prune또는 docker container prune지금을. VonC의 업데이트 된 답변을 참조하십시오 .

이전 답변 위의 여러 힌트를 구성하여 실행되지 않는 컨테이너를 모두 제거하는 가장 우아한 방법은 다음과 같습니다.

docker rm $(docker ps -q -f status=exited)

  • -q 컨테이너 ID 만 인쇄합니다 (열 헤더 없음)
  • -f 인쇄 된 컨테이너 목록을 필터링 할 수 있습니다 (이 경우 종료 된 컨테이너 만 표시하도록 필터링 함).

7
$ (docker images)의 텍스트 출력 형식이 변경되지 않는다고 가정하는 대신 도커를 사용하여 더 이상 사용되지 않는 컨테이너를 알려주기 때문에 정답입니다. 두 개의 프로세스 대신 하나의 추가 프로세스 만 생성하는 보너스 포인트.
eurythmia

18
-v매달려있는 볼륨을 피하기 위해 추가 할 수 있습니다 docker rm -v $(docker ps -q -f status=exited).. 매달린 볼륨에 대한 자세한 내용은 docs.docker.com/userguide/dockervolumes/… 를 참조하십시오 .
rluba

Docker 1.9에는 @rluba가 분명히 해당 문제를 처리하기위한 별도의 볼륨 API가 있습니다. github.com/docker/docker/pull/14242
Ryan Walls

별칭이 유용 할 수 있습니다.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Frank Neblung

정답으로 표시된 답변과 달리 @RyanWalls 답변은 OSX에서 더 간결하고 작동합니다.
Ray

255

공식적인 방법 은 다음과 같습니다.

docker rm `docker ps -aq`

Docker 관리자는 이에 대한 명령이 없다고 표시했으며 다음과 같은 명령을 작성합니다.

우리는 이것을 전에 논의했으며 Docker에 코드를 추가하지 않고도 위의 줄을 사용하는 것을 선호합니다.


6
스토리지 컨테이너도 삭제하기 때문에 이것은 나쁜 해결책입니다.
Sobrique 2019 년

8
"저장 용기"란 무엇입니까? 한 번에 데이터 볼륨에 대한 참조를 유지하는 데 사용 된 데이터 전용 컨테이너를 의미하는 경우 docker volume하위 명령 및 명명 된 볼륨 의 가용성으로 인해 더 이상 필요하지 않습니다 .
L0j1k

Windows Powershell에서는 작동하지 않습니다. 이를 위해 이것은 더 나은 솔루션입니다 : stackoverflow.com/a/23674294/1150683
Bram Vanroy

@Sobrique 만약 당신이 반응하지 않는다면, 적어도 당신은 당신의 코멘트를 삭제해야합니다.
peterh-복 직원 모니카

128

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

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

docker system prune-a가 없으면 smilebomb의 코멘트따라 매달린 이미지 또는 태그가없는 이미지 만 제거합니다 (이미지의 경우). .

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

docker system prune -a

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

wjv가 언급 했듯이

또한 유형의 객체에서 docker {container,image,volume,network} prune사용되지 않는 인스턴스를 제거하는 데 사용될 수도 있습니다 .

commit 913e5cb에 도입되었으며 Docker 1.13+에만 해당됩니다.

docker container prune

공유해 주셔서 감사합니다-이것이 보이도록 스레드에서 높은 답변을 인용하겠습니다
qkrijger

평소와 같이 -f플래그를 추가하여 질문없이 정리를 강제 실행합니다.
Dirk

3
요즘 정답으로 표시되어야합니다. 위의 대부분은 시간이 지났지 만 요즘 너무 복잡합니다
Eugen Mayer

최근에 훨씬 더 쉽게 동의했습니다.
Maxim Geerinck

코드 블록의 설명은 for docker system prune -a이며 사용하지 않은 이미지를 제거합니다. 매달려있는 이미지 나 태그가없는 이미지 docker system prune만 제거합니다 .
smilebomb

104

다음 과 함께 필터링 을 사용할 수 있습니다 docker ps.

docker rm $(docker ps -q -f status=exited)

그리고 이미지의 경우 :

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

그러나 일치하는 컨테이너가 없으면 오류 가 발생 docker rm하거나 docker rmi오류가 발생합니다. 오래된 docker rm $(docker ps -aq)트릭은 실행중인 컨테이너를 제거하려고 시도하면서 각 컨테이너에 실패하면서 더욱 악화되었습니다.

~/.bashrc또는 에 추가 할 수있는 깔끔한 스크립트는 다음과 같습니다 ~/.profile.

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

편집 : 아래에서 언급했듯이 원래 답변은 컨테이너가 아닌 이미지를 제거하는 것이 었습니다. 설명서에 대한 새로운 링크를 포함하여 두 가지에 모두 답변하도록 업데이트되었습니다. 새로운 ps필터링에 대해 언급 한 Adrian (및 Ryan의 답변)에게 감사합니다 .


2
이것의 진정한 장점에 유의하십시오 storage. 우연히 콘티 네이터를 죽이지 않습니다 .
Sobrique

3
당신은 또한 status=created실행 중이 아니며 실행되지 않은 것을 얻을 수 있습니다.
enderland

96

2019 업데이트 (최신)

docker container prune

-2017 (OLD) 방식

중지 된 컨테이너를 모두 제거하려면

docker rm $(docker ps -a -q)

모든 컨테이너 를 제거하려면 (중지 및 중지되지 않음)

docker rm  -f $(docker ps -a -q)

3
downvoted, 이것은 2017 년에 그렇게하는 방법이 확실 하지 않기 때문에-whis be docker volume/container/image prune, stackoverflow.com/a/39860665/3625317
Eugen Mayer

6
a)이 답변은 2016 년이었고 b) 많은 사람들이 최첨단을 달리지 않기 때문에 하향 투표에 반대했습니다.
keen

49

중지 된 모든 용기를 제거하십시오.

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

pauk960 의 코멘트에서 :

버전 1.3.0 부터는 docker ps대신을 grep Exited사용 하여 필터를 사용할 수 있습니다 docker ps -a -f status=exited. -q함께 사용 하면 전체 출력 대신 컨테이너 ID 만 얻을 수 있으므로 awk를 사용할 필요가 없습니다.


33

모든 컨테이너를 제거하기 위해 마음에 들지 않으면, 당신은 전이나와 특정 컨테이너 이후에 생성 된 모든 컨테이너를 선택할 수 있습니다 docker ps --before <container-ID>또는과를 docker ps --since <container-ID>. 이 기능은 Docker 버전 0.6.5 이상입니다.

시스템을 개발했는데 이제 작동하지만 많은 컨테이너가 남아 있다고 가정 해 봅시다. 해당 작업 버전 이전에 작성된 컨테이너를 제거하려고합니다. 로 작업 컨테이너의 ID를 확인하십시오 docker ps.

다른 컨테이너 전에 생성 된 컨테이너를 제거합니다

docker rm $(docker ps --before 9c49c11c8d21 -q)

또 다른 예. Docker 컨테이너에서 데이터베이스가 이미 실행 중입니다. 다른 컨테이너에서 실행되도록 응용 프로그램을 개발했으며 이제 불필요한 컨테이너가 많이 있습니다.

특정 컨테이너 이후에 생성 된 컨테이너 제거

docker rm $(docker ps --since a6ca4661ec7f -q)

Docker는 컨테이너를 /var/lib/docker/containers우분투에 저장 합니다. 추가 컨테이너는 다른 해를 끼치 지 않지만 디스크 공간을 차지한다고 생각합니다.


32

업데이트 : Docker 버전 1.13 (2017 년 1 월 릴리스)부터 다음 명령을 실행하여 중지 된 컨테이너, 사용되지 않은 볼륨, 매달려있는 이미지 및 사용되지 않은 네트워크를 정리할 수 있습니다.

docker system prune

exited상태 가있는 컨테이너 만 삭제 하려면 다음을 사용하십시오.

docker ps -aq -f status=exited | xargs docker rm

마찬가지로, 도커를 정리하는 경우 태그가 지정되지 않은 이름없는 이미지를 다음과 같이 제거 할 수 있습니다.

docker images -q --no-trunc -f dangling=true | xargs docker rmi

22

docker-cleanup태그가없는 컨테이너와 이미지를 제거하는 스크립트 는 다음과 같습니다 . 모든 업데이트 소스를 확인하십시오.

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

출처 : https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup


@BradMurray 감사합니다! 이러한처럼 수 있습니다 github.com/blueyed/dotfiles/commit/...
blueyed

3
xargs --no-run-if-empty옵션으로 인해 OSX에서 작동하지 않음
caktux

13

먼저 컨테이너를 제거하기 전에 컨테이너 실행을 중지하십시오.

흐르는 용기 제거

docker rm $(docker stop -t=1 $(docker ps -q))

kill대신에 사용할 수 있습니다 stop. 제 경우에는 stop재실행하는 경향이 있기 때문에 매번 새로운 것을 만드는 경향이 있으므로 선호합니다 .

참고 : 컨테이너를 중지하려고하면 오류가 발생합니다.

오류 : 실행중인 컨테이너를 제거 할 수 없습니다. 먼저 중지하십시오.

모든 용기를 제거하십시오

docker rm $(docker ps -a -q)

11

Windows 쉘에서 모든 컨테이너 제거 :

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

첫 페이지이므로 답변에 포함하겠습니다. 감사합니다
qkrijger

"Windows 셸에서" ? "Windows 셸 (CMD) 사용" 을 의미 합니까?
피터 Mortensen

10

https://github.com/HardySimpson/docker-cleanup

도커 정리

작은 일체형 쉘로 다음을 제거합니다.

  • 하루 전에 실행되지 않는 컨테이너
  • 나머지 컨테이너에 속하지 않은 이미지

crontab 작업으로 실행하려고합니다

특색

  • 모두 제거합니다 <none>:<none> 이미지
  • 이미지에 여러 repo : tag 참조가있는 경우 컨테이너 실행을 제외한 모든 repo : tag가 제거됩니다. 실제로 "docker rmi"의 특성입니다.
  • 많은 오류 메시지가 화면에 표시 될 것입니다, 당신은에 결정할 수 있습니다 2>/dev/null여부
  • docker-gc에서 무언가를 배우고 문제를 해결하십시오 (다양한 저장소가있는 이미지는 제거 할 수 없습니다 :

9

따라서 개인적으로 이미지와 컨테이너 모두에 대한 배포 스크립트의 일부로 최신 n 컨테이너와 이미지 만 유지하는 것이 좋습니다. Docker 이미지에 사용하는 것과 동일한 버전 관리 스키마 git tag로 태그를 지정하고 항상 최신 Docker 이미지에 "최신"태그를 지정합니다. 즉, 아무것도 정리하지 않으면 Docker 이미지가 다음과 같이 나타납니다.

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

물론 모든 이미지 (또는 컨테이너)가 모든 프로덕션 박스에서 영구적으로 돌아 가지 않게하고 싶습니다. 롤백을 위해 마지막 3 또는 4를 원하고 다른 모든 것을 제거하고 싶습니다. 유닉스 tail가 가장 친한 친구입니다. 이후 docker imagesdocker ps날짜별로 모두 위해, 우리는 그냥 사용할 수 있습니다 tail제외한 모든 세 가지를 선택하고 그들을 제거 :

docker rmi $(docker images -q | tail -n +4)

너무 많은 공간을 차지하거나 오래된 이미지를 정리하지 않고 충분한 이미지 만 편안하게 롤백 할 수 있도록 배포 스크립트 (또는 로컬)와 함께 실행하십시오.

개인적으로, 나는 항상 하나의 컨테이너를 생산 상자에 보관하지만 더 많은 것을 원한다면 컨테이너와 동일한 종류의 작업을 수행 할 수 있습니다.

docker rm $(docker ps -aq | tail -n +4)

마지막으로 간단한 예제에서는 한 번에 하나의 저장소 만 처리하지만 더 많은 정보가있는 경우 동일한 아이디어로 조금 더 정교해질 수 있습니다. some_repo / some_image에서 마지막 세 이미지를 유지하고 싶다고 가정 해보십시오. 난 그냥 혼합 수 grepawk나의 방법에있을 :

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

다시 말하지만, 동일한 아이디어가 컨테이너에도 적용되지만이 시점까지 이해가 되니 예제 제공을 중단하겠습니다.


8

사용하다:

docker rm -f $(docker ps -a -q)

로컬로 존재하는 모든 컨테이너를 강제로 중지하고 제거합니다.


자세한 내용으로 편집하십시오. 검색 가능한 콘텐츠가 포함되어 있지 않으며 누군가 "이 작업을 시도해야하는 이유"를 설명하지 않기 때문에 코드 전용 및 "이것을 시도하십시오"답변은 권장되지 않습니다. 우리는 지식의 원천이되기 위해 노력합니다.
Brian Tompsett-汤 莱恩

우분투 16.04에서 docker에는 sudo가 필요하므로을 작성해야합니다 sudo docker rm -f $(sudo docker ps -a -q).
Elliott

플러스로, 이것은 powershell 아래의 Windows에서도 작동합니다!
Robert Ivanc

@Elliott sudo'docker'그룹에 사용자를 추가하지 않으면 어디에서나 필요 하다고 생각 합니다. 도커 그룹에 사용자를 추가하여 sudo없이 우분투 16.10을 사용합니다.
emory

7

가장 오래된 용기 5 개를 제거하십시오.

docker rm `docker ps -aq | tail -n 5`

남은 컨테이너 수를 확인하십시오.

docker ps -aq | wc -l

좋은 직업 @Pithikos. 이전 컨테이너를 모두 제거하는 답변을 추가했습니다.
Mostafa Ghadimi

7

중지 된 모든 용기를 제거하십시오.

sudo 도커 rm $ (sudo docker ps -a -q)

이것은 docker ps -a -q가있는 모든 컨테이너 목록을 가져 와서 ID를 docker rm에 전달하여 중지 된 컨테이너를 모두 제거합니다. 이것은 실행중인 컨테이너를 제거해서는 안되며 실행중인 이미지를 제거 할 수 없다는 것을 알려줍니다.

태그없는 이미지를 모두 제거

이제 공간을 절약하기 위해 오래된 이미지를 정리하려고합니다.

sudo docker rmi $ (스도 커 도커 이미지 -q --filter "dangling = true")


-v 옵션을 지정하여 도커 볼륨을 삭제하는 것을 잊지 마십시오 (sudo docker rm -v $ (sudo docker ps -a -q))
vcarel

이것을 찾지 않았지만, 다음과 같은 것 같아요 :docker ps -aq | xargs docker rm -v
quine

이것은 Windows가 아닌 Linux에서만 작동하지만 Windows 용 docker rm -f $(docker ps -a -q)PowerShell / Docker에서는 작동합니다.
피터 Mortensen

6

새로운 방법 : spotify / docker-gc가 트릭을 재생합니다.

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • 1 시간 이상 지난 컨테이너는 제거됩니다.
  • 그 후에 남은 컨테이너에 속하지 않은 이미지는 제거됩니다

환경 설정을 지원합니다

여러 개의 태그가있는 이미지를 강제로 삭제

 FORCE_IMAGE_REMOVAL=1

컨테이너 삭제 강제

 FORCE_CONTAINER_REMOVAL=1 

가비지 콜렉션에서 최근에 종료 된 컨테이너 및 이미지 제외

 GRACE_PERIOD_SECONDS=86400

이 설정은 또한 몇 초 전에 GRACE_PERIOD_SECONDS 미만으로 작성된 이미지가 제거되지 않도록합니다.

드라 이런

 DRY_RUN=1

분리 된 컨테이너 볼륨 정리 CLEAN_UP_VOLUMES = 1

참조 : docker-gc

옛날 방식 :

오래된 비 실행 컨테이너 삭제

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

실행 중이 아닌 도커 컨테이너와 관련된 모든 이미지를 삭제합니다.

 docker images -q | xargs --no-run-if-empty docker rmi

docker 버전 1.10.x 이상에 대한 고립 된 도커 볼륨 정리

 docker volume ls -qf dangling=true | xargs -r docker volume rm

기간에 따라

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm

1
재미있는 대안. +1
VonC

6
  1. 모든 도커 프로세스를 제거하십시오.

    docker rm $(docker ps -a -q)
    
  2. 특정 용기를 제거하십시오.

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    


4
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done

스스로 검색하고 싶지 않은 사람들을 위해 github.com/spotify/docker-gc
grim

그것은 완벽. 또한 동일한 기능을 가진 답변을 작성했습니다.
Mostafa Ghadimi

3

나는 항상 docker rmi $(docker ps -a -q)모든 이미지를 제거 하는 데 사용 합니다.

실패 /var/lib/docker/graph하면 디렉토리를 제거 할 수 있습니다 docker rmi.


/ var / lib / docker / graph 정보를 추가해 주셔서 감사합니다
Jonathan DeMarks

문제는 이미지가 아닌 컨테이너를 제거하는 방법이었습니다.
pauk960

3

중지 된 컨테이너 만 제거 할 수 있습니다. 처음에 모든 것을 중지

docker stop $(docker ps -a -q)

그런 다음 제거 할 수 있습니다

docker rm $(docker ps -a -q)


3

컨테이너와 댕글 링 이미지를 청소하려면이 명령을 사용하십시오.

docker system prune -f

이것은 놀라운 프로 팁입니다!
b01

3

모든 컨테이너와 이미지를 중지 / 제거하는 기본 단계

  1. 모든 컨테이너 목록

    docker ps -aq

  2. 실행중인 모든 컨테이너를 중지

    docker stop $(docker ps -aq)

  3. 모든 용기를 제거하십시오

    docker rm $(docker ps -aq)

  4. 모든 이미지 제거

    docker rmi $(docker images -q)

참고 : 먼저 실행중인 모든 컨테이너를 제거하기 전에 중지해야합니다. 또한 이미지를 제거하기 전에 종속 컨테이너를 중지하고 제거해야합니다.


2

관심있는 사람은 qkrijger에서 예를 들어서 모두 명확한 것으로 바꿨습니다 (모두 중지하고 제거하십시오)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`

어쨌든 컨테이너를 제거하는 경우 docker rm -f $(docker ps --no-trunc -aq)더 빠릅니다
qkrijger

사실이지만 공유 또는 재사용 된 리소스 (예 : 연결된 볼륨, 올바르게 닫힌 활성 연결 등)를 정리하기 위해 적절한 종료를 수행하려면 먼저 stop을 호출해야합니다. 예를 들어 Jenkins 컨테이너가있는 경우 컨테이너를 죽이는 것은 나쁜 생각입니다. 지속되지 않은 변경 사항을 저장하고 로그인 한 사용자에게 경고하며 모든 빌드를 올바르게 중지하기를 원합니다.
Kraig McConaghy

매우 유효한 사용 사례라고 동의했습니다
qkrijger

2
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi

5
응답 할 때는 코드 덤프가 아니라 솔루션이 수행하는 작업에 대한 설명이 가장 좋습니다. 그렇지 않으면 응답이 삭제 될 수 있습니다.
AlBlue


2

나는 사용하고있다 :

docker rm -v $(docker ps -a -q -f status=exited)

종료 된 컨테이너를 삭제하려면 다음을 수행하십시오.

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

태그없는 모든 이미지를 제거하기 위해.

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