이 질문은 실행되지 않는 초과 Docker 컨테이너에 대해 우려해야 합니까?와 관련이 있습니다. .
오래된 용기를 제거하는 방법이 궁금합니다. docker rm 3e552code34a
사용하면 하나를 제거할 수 있지만 이미 많이 있습니다. docker rm --help
는 선택 옵션(전체 또는 이미지 이름별)을 제공하지 않습니다.
수동으로 쉽게 삭제할 수 있는 이러한 컨테이너가 저장된 디렉토리가 있습니까?
질문자 :qkrijger
이 질문은 실행되지 않는 초과 Docker 컨테이너에 대해 우려해야 합니까?와 관련이 있습니다. .
오래된 용기를 제거하는 방법이 궁금합니다. docker rm 3e552code34a
사용하면 하나를 제거할 수 있지만 이미 많이 있습니다. docker rm --help
는 선택 옵션(전체 또는 이미지 이름별)을 제공하지 않습니다.
수동으로 쉽게 삭제할 수 있는 이러한 컨테이너가 저장된 디렉토리가 있습니까?
Docker 1.13.x 부터 Docker 컨테이너 정리를 사용할 수 있습니다.
docker container prune
이렇게 하면 중지된 모든 컨테이너가 제거되고 모든 플랫폼에서 동일한 방식으로 작동해야 합니다.
docker system prune
하나의 명령으로 사용하지 않는 모든 컨테이너, 네트워크, 이미지(dangling 및 unreferenced) 및 선택적으로 볼륨을 정리합니다.
이전 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 업데이트(2016년 4분기), VonC에 대한 크레딧( 이 스레드 뒷부분 ):
docker system prune
은 사용하지 않는 모든 데이터를 삭제합니다(예: 컨테이너 중지, 컨테이너 없는 볼륨, 컨테이너 없는 이미지).
Docker 데몬 데이터가 디스크에서 차지하는 공간을 쉽게 시각화하고 "불필요한" 초과분을 쉽게 정리할 수 있는 몇 가지 새로운 명령을 소개하는 PR 26108 및 commit 86de7c0을 참조하십시오.
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 .
Docker 데몬 데이터가 디스크에서 차지하는 공간을 쉽게 시각화하고 "불필요한" 초과분을 쉽게 정리할 수 있는 몇 가지 새로운 명령을 소개하는 PR 26108 및 commit 86de7c0을 참조하십시오.
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
커밋 913e5cb 에 도입되었으며 Docker 1.13+에만 해당됩니다.
docker container prune
2021년 업데이트됨 (최신)
docker container prune
이것은 - 2017 (OLD) 방법
모든 중지된 컨테이너 를 제거하려면
docker rm $(docker ps -a -q)
모든 컨테이너 (중지 및 비중지) 를 제거하려면
docker rm -f $(docker ps -a -q)
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의 답변)에게 감사드립니다.
중지된 모든 컨테이너를 제거합니다.
docker rm $(docker ps -a | grep Exited | awk '{print $1}')
pauk960 의 댓글에서 :
버전 1.3.0
docker ps
와 함께 필터를 사용할 수 있습니다.grep Exited
대신docker ps -a -f status=exited
exited 를 사용합니다. 그리고-q
함께 사용하면 전체 출력 대신 컨테이너 ID만 얻을 수 있으므로 awk를 사용할 필요가 없습니다.
docker ps -f before=<container-ID>
또는 docker ps -f since=<container-ID>
하여 특정 컨테이너 이전 또는 이후에 생성된 모든 컨테이너를 선택할 수 있습니다.
시스템을 개발했고 이제 작동하지만 컨테이너가 많이 남아 있다고 가정해 보겠습니다. 해당 작업 버전 이전에 생성된 컨테이너를 제거하려고 합니다. docker ps
를 사용하여 작업 컨테이너의 ID를 확인합니다.
다른 컨테이너보다 먼저 생성된 컨테이너 제거
docker rm $(docker ps -f before=9c49c11c8d21 -q)
또 다른 예. Docker 컨테이너에서 이미 실행 중인 데이터베이스가 있습니다. 다른 컨테이너에서 실행되도록 애플리케이션을 개발했으며 이제 불필요한 컨테이너가 많이 있습니다.
특정 컨테이너 이후에 생성된 컨테이너 제거
docker rm $(docker ps -f since=a6ca4661ec7f -q)
Docker는 /var/lib/docker/containers
에 컨테이너를 저장합니다. 여분의 컨테이너는 다른 해를 끼치 지 않지만 디스크 공간을 차지한다고 생각합니다.
업데이트: 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
다음은 태그가 지정되지 않은 컨테이너와 이미지를 제거하는 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
먼저 컨테이너를 제거하기 전에 실행 중인 컨테이너를 중지합니다.
docker rm $(docker stop -t=1 $(docker ps -q))
stop
대신 kill
을 사용할 수 있습니다. 제 경우에는 stop
선호하고 매번 새로 만드는 경향이 있으므로 멋지게 종료하려고 합니다.
참고: 컨테이너를 중지하려고 하면 오류가 발생합니다.
오류: 실행 중인 컨테이너를 제거할 수 없습니다. 먼저 중지하십시오.
docker rm $(docker ps -a -q)
Windows 셸에서 모든 컨테이너 제거:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
https://github.com/HardySimpson/docker-cleanup
다음을 제거하는 작은 올인원 쉘:
crontab 작업으로 실행하려고 합니다.
<none>:<none>
이미지를 제거합니다.2>/dev/null
따라서 개인적으로 가장 최근 n개의 컨테이너와 이미지만 유지하면서 이미지와 컨테이너 모두에 대한 배포 스크립트의 일부로 이 작업을 수행하는 것이 좋습니다. git tag
와 함께 사용하는 것과 동일한 버전 관리 스키마로 Docker 이미지에 태그를 지정하고 항상 최신 Docker 이미지에 "latest" 태그를 지정합니다. 즉, 아무것도 정리하지 않으면 내 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를 원하고 다른 모든 것을 제거하기를 원합니다. Unix의 tail
는 여기에서 가장 친한 친구입니다. docker images
와 docker ps
모두 날짜순이므로 tail
을 사용하여 상위 3개를 제외한 모든 항목을 선택하고 제거할 수 있습니다.
docker rmi $(docker images -q | tail -n +4)
배포 스크립트(또는 로컬로)와 함께 실행하여 공간을 너무 많이 차지하거나 오래된 이미지로 물건을 복잡하게 만들지 않고 편안하게 롤백할 수 있는 충분한 이미지를 항상 유지하십시오.
개인적으로 저는 생산 상자에 항상 하나의 컨테이너만 보관하지만 더 많은 것을 원하면 컨테이너로 동일한 종류의 작업을 수행할 수 있습니다.
docker rm $(docker ps -aq | tail -n +4)
마지막으로, 단순화된 예제에서는 한 번에 하나의 저장소만 다루지만 더 많은 저장소가 있는 경우 동일한 아이디어로 좀 더 정교해질 수 있습니다. some_repo/some_image에서 마지막 세 개의 이미지를 유지하고 싶다고 가정해 보겠습니다. grep
과 awk
섞어서 진행하면 됩니다.
docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)
다시 말하지만, 동일한 아이디어가 컨테이너에도 적용되지만 이 시점에서 이해하게 되므로 예제 제공을 중단하겠습니다.
사용하다:
docker rm -f $(docker ps -a -q)
로컬에 있는 모든 컨테이너를 강제로 중지하고 제거합니다.
가장 오래된 컨테이너 5개 제거:
docker rm `docker ps -aq | tail -n 5`
남은 컨테이너 수 확인:
docker ps -aq | wc -l
중지된 모든 컨테이너를 제거합니다.
sudo 도커 rm $(sudo 도커 ps -a -q)
docker ps -a -q를 사용하여 모든 컨테이너 목록을 가져오고 해당 ID를 docker rm에 전달하여 중지된 모든 컨테이너를 제거합니다. 이것은 실행 중인 컨테이너를 제거해서는 안 되며 실행 중인 이미지를 제거할 수 없다는 메시지가 표시됩니다.
태그가 지정되지 않은 모든 이미지 제거
이제 공간을 절약하기 위해 오래된 이미지를 정리하려고 합니다.
sudo 도커 rmi $(sudo 도커 이미지 -q --filter "dangling=true")
새로운 방법: spotify/docker-gc가 트릭을 재생합니다.
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
환경 설정을 지원했습니다.
태그가 여러 개인 이미지를 강제로 삭제
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
도커 버전 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
모든 도커 프로세스를 제거합니다.
docker rm $(docker ps -a -q)
특정 컨테이너 제거:
$ docker ps -a (lists all old containers) $ docker rm container-Id
다음 명령을 사용하여 종료된 컨테이너를 제거할 수 있습니다.
docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)
다음은 docker에서 이전 이미지를 제거하는 전체 요지입니다. Gist to remove old Docker container and images .
#!/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
중지된 컨테이너만 제거할 수 있습니다. 처음에 모두 중지
docker stop $(docker ps -a -q)
그런 다음 제거할 수 있습니다.
docker rm $(docker ps -a -q)
나는 항상 모든 이미지를 제거하기 docker rmi $(docker ps -a -q)
docker rmi
실패하면 /var/lib/docker/graph
디렉토리를 제거할 수 있습니다.
모든 컨테이너 나열
docker ps -aq
실행 중인 모든 컨테이너 중지
docker stop $(docker ps -aq)
모든 컨테이너 제거
docker rm $(docker ps -aq)
모든 이미지 제거
docker rmi $(docker images -q)
참고: 먼저 실행 중인 모든 컨테이너를 제거하기 전에 중지해야 합니다. 또한 이미지를 제거하기 전에 종속 컨테이너를 중지하고 제거해야 합니다.
종료 및 다시 시작 도커 컨테이너를 삭제하기 위해 다음 명령을 사용하고 있습니다.
docker stop --force $(docker ps -a|grep Exited| awk '{print $1}') docker rm --force $(docker ps -a|grep Exited| awk '{print $1}') docker stop --force $(docker ps -a|grep Restarting| awk '{print $1}') docker rm --force $(docker ps -a|grep Restarting| awk '{print $1}')
아래 명령을 사용하여 없음으로 명명된 이미지 제거
docker image rm --force $(docker image ls |grep none |awk '{print $3}')
컨테이너와 댕글링 이미지를 청소하려면 이 명령을 시도하십시오.
docker system prune -a
관심 있는 사람을 위해 qkrijger에서 예제를 가져와서 모두 지우기(중지 및 모두 제거)로 전환했습니다.
docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`
실행 중인 컨테이너에서 현재 사용하지 않는 모든 것을 간단히 제거하려면 일반적으로 .bash_profile
에 넣는 다음 별칭 이 도움이 될 것입니다.
alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"
dockerclean
이 명령줄에서 호출될 때마다 중지된 컨테이너와 사용되지 않는 이미지 레이어가 제거됩니다. 실행 중인 컨테이너 및 사용된 이미지의 경우 경고 메시지를 인쇄하고 건너뜁니다.
#!/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
출처 : http:www.stackoverflow.com/questions/17236796/how-to-remove-old-docker-containers
Python에 디렉토리가 있는지 확인하는 방법 (0) | 2023.04.13 |
---|---|
stderr로 출력하는 echo (0) | 2023.04.13 |
디스크에서 이미 삭제된 Git 리포지토리에서 여러 파일 제거 (0) | 2023.04.13 |
프로젝트의 단일 파일에 대해 ARC를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
Python 프로그램 실행 시간은 어떻게 얻습니까? (0) | 2023.04.13 |