이 질문은 과도하고 비 실행중인 Docker 컨테이너에 대해 걱정해야합니까? .
오래된 컨테이너를 제거하는 방법이 궁금합니다. 는 docker rm 3e552code34a
단일 하나를 제거 할 수 있습니다,하지만 난 이미 많이 있습니다. docker rm --help
전체 또는 이미지 이름과 같은 선택 옵션을 제공하지 않습니다.
어쩌면 수동으로 쉽게 삭제할 수있는 컨테이너가 저장되어있는 디렉토리가 있습니까?
답변
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의 예입니다 .
답변
내가 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 26108 및 commit 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
답변
대답 업데이트
사용 docker system prune
또는 docker container prune
지금을. VonC의 업데이트 된 답변을 참조하십시오 .
이전 답변
위의 여러 힌트를 구성하여 실행되지 않는 컨테이너를 모두 제거하는 가장 우아한 방법은 다음과 같습니다.
docker rm $(docker ps -q -f status=exited)
-q
컨테이너 ID 만 인쇄합니다 (열 헤더 없음)-f
인쇄 된 컨테이너 목록을 필터링 할 수 있습니다 (이 경우 종료 된 컨테이너 만 표시하도록 필터링 함).
답변
공식적인 방법 은 다음과 같습니다.
docker rm `docker ps -aq`
Docker 관리자는 이에 대한 명령이 없다고 표시했으며 다음과 같은 명령을 작성합니다.
우리는 이것을 전에 논의했으며 Docker에 코드를 추가하지 않고도 위의 줄을 사용하는 것을 선호합니다.
답변
Docker 1.13 (2016 년 4 분기)을 사용하면 다음이 가능합니다.
docker system prune -a
사용하지 않는 모든 데이터를 삭제합니다 (예 : 컨테이너가 중지되고 컨테이너가없는 볼륨 및 컨테이너가없는 이미지).
docker system prune
-a가 없으면 smilebomb의 코멘트 에 따라 매달린 이미지 또는 태그가없는 이미지 만 제거합니다 (이미지의 경우). .
PR 26108 및 commit 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
답변
다음 과 함께 필터링 을 사용할 수 있습니다 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의 답변)에게 감사합니다 .
답변
2019 업데이트 (최신)
docker container prune
이 -2017 (OLD) 방식
중지 된 컨테이너를 모두 제거하려면
docker rm $(docker ps -a -q)
모든 컨테이너 를 제거하려면 (중지 및 중지되지 않음)
docker rm -f $(docker ps -a -q)