오래되고 사용되지 않은 Docker 이미지를 제거하는 방법


762

Docker를 오랫동안 실행하면 시스템에 많은 이미지가 있습니다. 저장 공간을 확보하기 위해 사용하지 않는 모든 Docker 이미지를 한 번에 안전하게 제거하려면 어떻게해야합니까?

또한 몇 개월 전에 가져온 이미지를 제거하고 싶습니다 TAG.

따라서 태그가없는 이미지 만 제거하도록 요구하지 않습니다. 태그가 지정되지 않은 이미지와 몇 달 전에 가져온 것과 같은 다른 이미지가 모두 포함 된 일반적인 사용하지 않는 이미지를 제거하는 방법을 찾고 TAG있습니다.

답변:


1402

2016 년 9 월 업데이트 : Docker 1.13 : PR 26108커밋 86de7c0 에는 도커 데몬 데이터가 디스크에서 차지하는 공간을 시각화하고 "필요하지 않은"초과 량을 쉽게 정리할 수있는 몇 가지 새로운 명령이 도입되었습니다.

docker system prune모든 매달려있는 데이터를 삭제합니다 (예 : 컨테이너 중지, 컨테이너가없는 볼륨 및 컨테이너가없는 이미지). -a옵션이있는 사용하지 않은 데이터라도 .

당신은 또한 :

을 위해 사용되지 않은 이미지 사용 docker image prune -a(매다는 제거 ununsed 이미지).
경고 : ' 미사용 '은 "컨테이너가 참조하지 않는 이미지"를 의미 -a합니다. 사용하기 전에주의하십시오 .

에 도시 된 바와 같이, AL대답 , docker system prune --all모두 제거 되지 않은 단지 조금 너무 많이가 될 수 있습니다 사람을 ... 매달려없는 이미지를.

옵션docker xxx prune 과 결합 하면 가지 치기를 제한하는 좋은 방법이 될 수 있습니다 ( docker SDK API 1.28 최소, docker 17.04+ )--filter

현재 지원되는 필터는 다음과 같습니다.

  • until (<timestamp>) -지정된 타임 스탬프 전에 생성 된 컨테이너, 이미지 및 네트워크 만 제거
  • label( label=<key>, label=<key>=<value>, label!=<key>, 또는 label!=<key>=<value>) - 만 (또는 용기와, 화상, 네트워크, 볼륨을 제거 하지 않고 경우에 label!=...사용된다) 지정된 라벨.

예를 들어 " 이미지 정리 "를 참조하십시오 .


원래 답변 (2016 년 9 월)

나는 보통 :

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

[dangling images] 13 제거에 대한 별칭 이 있습니다 .drmi

dangling=true필터는 사용되지 않는 이미지를 찾습니다

이렇게하면 레이블이있는 이미지가 더 이상 참조하지 않는 중간 이미지가 제거됩니다.

종료 된 프로세스 (컨테이너)에 대해 동일한 작업을 먼저 수행합니다.

alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'

haridsv 종료 지점 코멘트에 :

기술적으로 이미지를 정리하기 전에 먼저 컨테이너를 정리해야합니다. 이미지가 더 많이 걸리고 오류가 줄어 듭니다 .


Jess Frazelle (jfrazelle) 에는 bashrc 기능이 있습니다 .

dcleanup(){
    docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
    docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}

"참조되지 않은 매달린"이미지뿐만 아니라 오래된 이미지를 제거하려면 다음을 고려할 수 있습니다 docker-gc.


간단한 Docker 컨테이너 및 이미지 가비지 수집 스크립트

  • 1 시간 이상 지난 컨테이너는 제거됩니다.
  • 그 후에 나머지 컨테이너에 속하지 않은 이미지는 제거됩니다.

28
"dangling=true"실제로 무엇을 의미 하는지에 대한 문서가 있습니까?
CivFan

1
이 스크립트는 몇 달 전에 가져온 일부 이미지를 제거 할 수 없습니다
Quanlong

2
dcleanup대단해!
Quanlong

4
@herm 먼저 docker system prune이미지 이상의 것을 제거합니다. docker image prune대신 사용하십시오 . 그리고 될 매우주의-a: A는 docker system prune -a파괴 효과 (물론 볼륨을 제거)를 가질 수있다. 마지막으로 예, -a사용하지 않는 이미지를 제거하고 답을 편집합니다.
VonC

2
@stom : 'unused'는 "컨테이너가 참조하지 않는 이미지를 의미하지만 매달려있는 것은 전혀 태그가 지정되지 않음을 의미합니다 (단지 ID)
VonC

124

두 번째 업데이트 (2017-07-08) :

더 최근의을 사용하여 VonC를 (다시) 참조하십시오 system prune. 초조 한 사람들은 다음 -f, --force옵션을 사용 하여 프롬프트를 건너 뛸 수 있습니다 .

docker system prune -f

초조하고 무모한 사람은 다음 -a, --all옵션을 사용하여 "매달려 진 이미지뿐만 아니라 사용하지 않은 이미지"를 추가로 제거 할 수 있습니다 .

docker system prune -af

https://docs.docker.com/engine/reference/commandline/system_prune/

최신 정보:

최근에 추가 된 명령 을 사용하는 VonC의 답변 을 참조하십시오 prune. 해당 쉘 별명 편의는 다음과 같습니다.

alias docker-clean=' \
  docker container prune -f ; \
  docker image prune -f ; \
  docker network prune -f ; \
  docker volume prune -f '

오래된 답변 :

중지 된 (종료 된) 컨테이너 삭제 :

$ docker ps --no-trunc -aqf "status=exited" | xargs docker rm

사용하지 않은 (매달린) 이미지를 삭제하십시오.

$ docker images --no-trunc -aqf "dangling=true" | xargs docker rmi

이 행사 한 경우 각별히주의 에 관해서는 돌이킬 수없는 데이터 손실 , 당신은 삭제할 수있는 사용하지 않은 볼륨 (V1.9 이상) (매달려) :

$ docker volume ls -qf "dangling=true" | xargs docker volume rm

다음은 편리한 쉘 별명입니다.

alias docker-clean=' \
  docker ps --no-trunc -aqf "status=exited" | xargs docker rm ; \
  docker images --no-trunc -aqf "dangling=true" | xargs docker rmi ; \
  docker volume ls -qf "dangling=true" | xargs docker volume rm'

참고 문헌 :


3
볼륨 정리에주의를 기울였습니다. 자동으로 생성 된 컨테이너 볼륨과 현재 사용 중이 아닌 명명 된 볼륨이 모두 dangling = true와 함께 나열됩니다.
BMitch

1
@BMitch, 당신은 절대적으로 맞습니다; docker volume rm레시피에 선미 경고를 추가했습니다 . 당신이 가진 제안을 환영합니다.
rubicks

1
도 커가 명명 된 볼륨에 대해 다른 필터 옵션을 제공하고 싶습니다. 좋은 해결 방법을 찾으면 공유해야합니다.
BMitch 2016 년

2
예, 그러나 불행히도 이름이 지정된 볼륨을 간단한 플래그로 익명 컨테이너 볼륨과 분리하지 않습니다. 내가 사용한 명령 docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rm은 guid와 비슷한 것으로 볼륨의 이름을 지정하지 않는 한 작동합니다. 새 필터 구문에 대해 이것을 조정할 수 있습니다.
BMitch

1
사용하지 않은 (매달린) 볼륨을 제거하면 실제로 도움이됩니다!
Kane

61

한 달 이상 지난 태그 가 달린 이미지 를 제거하려면 :

$ docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' \
    | grep ' months' | awk '{ print $1 }' \
    | xargs --no-run-if-empty docker rmi

그것이거야 참고 실패 저장소에서 참조 컨테이너에서 사용하는 이미지를 제거하기 위해, 당신이 원하는 아마 인 ... 부양 자녀 이미지를 가지고있다. 그렇지 않으면 그냥 -f플래그를 추가하십시오 .

/etc/cron.daily/docker-gc스크립트 예 :

#!/bin/sh -e

# Delete all stopped containers (including data-only containers).
docker ps -a -q --no-trunc --filter "status=exited" | xargs --no-run-if-empty docker rm -v

# Delete all tagged images more than a month old
# (will fail to remove images still used).
docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' | grep ' months' | awk '{ print $1 }' | xargs --no-run-if-empty docker rmi || true

# Delete all 'untagged/dangling' (<none>) images
# Those are used for Docker caching mechanism.
docker images -q --no-trunc --filter dangling=true | xargs --no-run-if-empty docker rmi

# Delete all dangling volumes.
docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm

2
+1 오래된 도커 이미지를 삭제하는 명령입니다. 약간 해 키지 만 솔루션은 독창적이고 완벽하게 작동합니다. :)
Rick

3
이것은 좋지만 적어도 4 개월 이상 된 도커 이미지 만 삭제한다고 생각합니다 . .CreatedSince예를 들어, 몇 주가 지난 이미지의 경우에도 출력에서 ​​시간 단위로 주를 사용합니다 12 weeks.
joelittlejohn

2
이것은 나를 위해 훌륭하고 간단하게 작동했습니다.docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
Kent Bull

34

다른 답변은 훌륭합니다.

docker system prune # doesn't clean out old images
docker system prune --all # cleans out too much

그러나 두 명령 중 중간에 무언가가 필요했기 때문에 filter옵션이 필요했습니다.

docker image prune --all --filter "until=4320h" # delete images older than 6 months ago; 4320h = 24 hour/day * 30 days/month * 6 months

희망이 있습니다 :)

참조 : https://docs.docker.com/config/pruning/#prune-images


1
매우 과소 평가 된 답변! 마감 날짜로 정리할 수 있으면 매우 유용합니다.
Nik Reiman

24

Docker 1.13 이상 이 있다고 가정하면 정리 명령을 사용할 수 있습니다. 오래된 이미지를 제거하기위한 질문에 대해서는 첫 번째 이미지를 원합니다.

# Remove unused images
docker image prune

# Remove stopped containers.
docker container prune

# Remove unused volumes
docker volume prune

# Remove unused networks
docker network prune

# Command to run all prunes:
docker system prune

명령 사용에 익숙해 지지 않는 것이 좋습니다 docker system prune. 사용자가 의도하지 않은 것을 실수로 제거한다고 생각합니다. 개인적으로 저는 주로 docker image pruneand docker container prune명령을 사용 합니다.


4
사용하지 않는 네트워크를 정리하고 싶지 않습니까? 모든 컨테이너가 중지되고 해당 네트워크를 삭제하면 컨테이너를 시작하면 컨테이너가 어떻게 작동합니까? docker run과 함께 네트워크가 생성됩니까?
meffect

@ meffect 나는 완전히 동의하고 내가 네트워크 정리를 떠난 것을 신이 발견했다. 나는 그것을 포함시키고 마지막 docker system prune에 개별 자두를 사용하는 것이 좋지 않을 것이라고 말하는 부분을 추가했습니다 .
Programster

15

지금까지 (Docker 버전 1.12) 다음 명령을 사용하여 실행중인 모든 컨테이너를 삭제했습니다. 또한 볼륨을 삭제하려면 다음 명령에서 해당 태그 -v를 사용하여 수동으로 수행 할 수 있습니다.

종료 된 모든 컨테이너 삭제

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

중지 된 컨테이너 모두 삭제

docker rm $(docker ps -a -q)

실행중인 컨테이너와 중지 된 컨테이너 모두 삭제

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

기준없이 모든 용기를 제거하십시오

docker container rm $(docker container ps -aq)

그러나 버전 1.13 이상에서는 완전한 시스템 및 정리를 위해 다음 명령을 직접 사용할 수 있습니다.

docker system prune

사용하지 않는 모든 컨테이너, 이미지, 네트워크 및 볼륨이 삭제됩니다. 개별 구성 요소를 정리하는 다음 명령을 사용하여이 작업을 수행 할 수도 있습니다.

docker container prune
docker image prune
docker network prune
docker volume prune

14

이것은 나를 위해 일했다 :

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

13

다음 명령은 48 시간보다 오래된 이미지를 삭제합니다.

$ docker image prune --all --filter until=48h

1
필터를 사용하면 지정된 버전 이전의 모든 버전을 나열한 docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8다음 rmi 명령을 적용하여 삭제할 수도 있습니다. docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
rodvlopes

9

최근에 내 서버 중 하나에서이 문제를 해결하기위한 스크립트를 작성했습니다.

#!/bin/bash

# Remove all the dangling images
DANGLING_IMAGES=$(docker images -qf "dangling=true")
if [[ -n $DANGLING_IMAGES ]]; then
    docker rmi "$DANGLING_IMAGES"
fi

# Get all the images currently in use
USED_IMAGES=($( \
    docker ps -a --format '{{.Image}}' | \
    sort -u | \
    uniq | \
    awk -F ':' '$2{print $1":"$2}!$2{print $1":latest"}' \
))

# Get all the images currently available
ALL_IMAGES=($( \
    docker images --format '{{.Repository}}:{{.Tag}}' | \
    sort -u \
))

# Remove the unused images
for i in "${ALL_IMAGES[@]}"; do
    UNUSED=true
    for j in "${USED_IMAGES[@]}"; do
        if [[ "$i" == "$j" ]]; then
            UNUSED=false
        fi
    done
    if [[ "$UNUSED" == true ]]; then
        docker rmi "$i"
    fi
done

8

다음은 Docker 이미지를 정리하고 공간을 확보하는 스크립트입니다.

#!/bin/bash -x
## Removing stopped container
docker ps -a | grep Exited | awk '{print $1}' | xargs docker rm

## If you do not want to remove all container you can have filter for days and weeks old like below
#docker ps -a | grep Exited | grep "days ago" | awk '{print $1}' | xargs docker rm
#docker ps -a | grep Exited | grep "weeks ago" | awk '{print $1}' | xargs docker rm

## Removing Dangling images
## There are the layers images which are being created during building a Docker image. This is a great way to recover the spaces used by old and unused layers.

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

## Removing images of perticular pattern For example
## Here I am removing images which has a SNAPSHOT with it.

docker rmi $(docker images | grep SNAPSHOT | awk '{print $3}')

## Removing weeks old images

docker images | grep "weeks ago" | awk '{print $3}' | xargs docker rmi

## Similarly you can remove days, months old images too.

원본 스크립트

https://github.com/vishalvsh1/docker-image-cleanup

일반적으로 Docker는 이미지 작성 및 레이어와 관련된 모든 임시 파일을

/ var / lib / docker

이 경로는 일반적으로 루트 파티션 "/" 에있는 시스템의 로컬 경로입니다 .

더 큰 디스크 공간을 마운트하고 내용을 /var/lib/docker새 마운트 위치 로 이동하고 기호 링크를 만들 수 있습니다.

이 방법으로 Docker 이미지가 공간을 차지하더라도 다른 마운트 위치를 사용하므로 시스템에 영향을 미치지 않습니다.

원본 게시물 : 로컬 디스크에서 Docker 이미지 관리


6

이 명령을 사용하고 있습니다 :

export BEFORE_DATETIME=$(date --date='10 weeks ago' +"%Y-%m-%dT%H:%M:%S.%NZ")
docker images -q | while read IMAGE_ID; do
    export IMAGE_CTIME=$(docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID})
    if [[ "${BEFORE_DATETIME}" > "${IMAGE_CTIME}" ]]; then
        echo "Removing ${IMAGE_ID}, ${BEFORE_DATETIME} is earlier then ${IMAGE_CTIME}"
        docker rmi -f ${IMAGE_ID};
    fi;
done

생성 시간이 10 주 이상인 모든 이미지가 제거됩니다.


나는 당신이 교환 생각 IMAGE_CTIME하고 BEFORE_DATETIME있다는 점에서 echo명령
우도 G

5

X 개월 전에 가져온 이미지를 제거 하려면 3 개월 전에 만든 이미지를 제거하는 아래 예를 시도해보십시오.

three_months_old_images=`docker images | grep -vi "<none>" | tr -s ' ' | cut -d" " -f3,4,5,6 | grep "3 months ago" | cut -d" " -f1`
docker rmi $three_months_old_images

1
이것은 정확하지 않습니다. 이렇게하면 3 개월 전에 가져온 이미지 아니라 3 개월 전에 생성 된 이미지가 제거됩니다 (원격 소스에서 이미지를 가져온 경우 이미 3 개월이 지난 이미지 일 수 있음).
Andrew Ferrier

이를 통해 다양한 기준에 따라 더 많은 필터를 만들 수
있었습니다.


3

docker system prune -a

(명령을 확인하라는 -f메시지가 표시됩니다. 수행중인 작업을 알고 있으면 강제로 실행 하십시오 .)


5
이것은 위험 합니다. docker system prune심지어 이름이있는 볼륨을 제거하는 것에 대한 다른 주석을 참조하십시오 -a.
RichVel

3

@VonC는 이미 매우 좋은 대답을 주었지만 여기에 완성도를 높이기 위해 사용하고있는 약간의 스크립트가 있습니다.

#!/bin/bash

imgs=$(docker images | awk '/<none>/ { print $3 }')
if [ "${imgs}" != "" ]; then
   echo docker rmi ${imgs}
   docker rmi ${imgs}
else
   echo "No images to remove"
fi

procs=$(docker ps -a -q --no-trunc)
if [ "${procs}" != "" ]; then
   echo docker rm ${procs}
   docker rm ${procs}
else
   echo "No processes to purge"
fi

잘 작동하지만 여전히 얻을 수 있습니다 Error response from daemon: You cannot remove a running container. docker kill $(docker ps -q)해결을 위해 3 행 전에 추가
Vincent

$(docker images -q)대신에 사용 하지 $(docker images | awk '/<none>/ { print $3 }')않습니까?
SeF

1
@SeF : 내가 docker images -q이미지 id로 구성된 벡터를 얻는 다면 다른 것은 없습니다. 내가하는 일을하면 더 많은 것을 얻 <none>습니다. 여기서 필터링 할 수 있습니다. 맞는 말이다?
Dirk Eddelbuettel

2

컨테이너가 실행되지 않는 태그가 지정된 이미지를 제거하려면 약간의 스크립트를 사용해야합니다.

#!/bin/bash

# remove not running containers
docker rm $(docker ps -f "status=exited" -q)

declare -A used_images

# collect images which has running container
for image in $(docker ps | awk 'NR>1 {print $2;}'); do
    id=$(docker inspect --format="{{.Id}}" $image);
    used_images[$id]=$image;
done

# loop over images, delete those without a container
for id in $(docker images --no-trunc -q); do
    if [ -z ${used_images[$id]} ]; then
        echo "images is NOT in use: $id"
        docker rmi $id
    else
        echo "images is in use:     ${used_images[$id]}"
    fi
done

2

몇 주 전에 오래된 용기를 제거하십시오.

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

몇 주 전에 오래된 이미지를 제거하십시오. 조심해. 몇 주 전에 생성되었지만 새 이미지에서 사용중인 기본 이미지가 제거됩니다.

docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')


2

태그 된 이미지를 제거하는 방법

  1. 도커 rmi 태그 먼저

  2. 도커 rmi 이미지.

    # 하나의 docker rmi 호출에서 수행 할 수있는 예 : # docker rmi <repo : tag> <imageid>

(이것은 2016 년 11 월, Docker 버전 1.12.2에서 작동합니다)

예 :

$ docker images 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
usrxx/the-application   16112805            011fd5bf45a2        12 hours ago        5.753 GB
usryy/the-application   vx.xx.xx            5af809583b9c        3 days ago          5.743 GB
usrzz/the-application   vx.xx.xx            eef00ce9b81f        10 days ago         5.747 GB
usrAA/the-application   vx.xx.xx            422ba91c71bb        3 weeks ago         5.722 GB
usrBB/the-application   v1.00.18            a877aec95006        3 months ago        5.589 GB

$ docker rmi usrxx/the-application:16112805 && docker rmi 011fd5bf45a2
$ docker rmi usryy/the-application:vx.xx.xx && docker rmi 5af809583b9c
$ docker rmi usrzz/the-application:vx.xx.xx eef00ce9b81f
$ docker rmi usrAA/the-application:vx.xx.xx 422ba91c71bb
$ docker rmi usrBB/the-application:v1.00.18 a877aec95006

예를 들어 스크립트는 2 주가 지난 것을 제거합니다.

IMAGESINFO=$(docker images --no-trunc --format '{{.ID}} {{.Repository}} {{.Tag}} {{.CreatedSince}}' |grep -E " (weeks|months|years)")
TAGS=$(echo "$IMAGESINFO" | awk '{ print $2 ":" $3 }' )
IDS=$(echo "$IMAGESINFO" | awk '{ print $1 }' )
echo remove old images TAGS=$TAGS IDS=$IDS
for t in $TAGS; do docker rmi $t; done
for i in $IDS; do docker rmi $i; done

2
docker rm $(docker ps -faq)
docker rmi $(docker ps -faq)

-f 힘

-모두

모드에서 -q


1
docker rm `docker ps -aq`

또는

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

3
이 명령은 컨테이너를 제거하기 때문에이 대답은 위험하다고 생각합니다. 첫째, OP는 컨테이너가 아닌 이미지를 제거하는 방법을 묻고있었습니다. 더 중요한 것은 사람들이 유출 된 컨테이너에 귀중한 데이터를 가지고 있기 때문에 이러한 명령으로 인해 데이터가 손실 될 수 있습니다.
u.unver34

프로덕션 서버에서 이러한 명령을 적용했을 때 원하지 않는 결과를 설명해야합니다.
Daniel

이미지가 아닌 컨테이너를 제거합니다.
SeF

1

때로는 공간이 특정 이미지 또는 기존 컨테이너에 할당되지 않은 경우에도 Docker가 디스크 공간을 할당하고 계속 사용하는 문제가 발생합니다. 이 문제를 실수로 생성 한 최신 방법은 RHEL 7.1의 "docker"대신 "docker-engine"centos build를 사용하는 것입니다. 때때로 컨테이너 정리가 성공적으로 완료되지 않아 공간이 재사용되지 않는 것 같습니다. /로 할당 한 80GB 드라이브가 / var / lib / docker 파일로 채워 졌을 때 문제를 해결하는 창의적인 방법을 찾아야했습니다.

여기에 내가 생각해 낸 것이 있습니다. 먼저 디스크 가득 참 오류를 해결하십시오.

  1. 도커 중지 : systemctl stop docker
  2. / mnt / docker로 마운트 된 새 드라이브를 할당했습니다.
  3. / var / lib / docker의 모든 파일을 / mnt / docker로 이동하십시오. 나는 다음 명령을 사용했다 : rsync -aPHSx --remove-source-files / var / lib / docker / / mnt / docker /
  4. 새 드라이브를 / var / lib / docker에 마운트하십시오.

이 시점에서 더 이상 디스크 가득 참 오류가 발생하지 않았지만 여전히 많은 양의 공간을 낭비하고있었습니다. 다음 단계는이를 처리하는 것입니다.

  1. 도커 시작 : systemctl start docker

  2. 모든 이미지를 저장하십시오 : docker save $ (docker images | sed -e '/ ^ / d'-e '/ ^ REPOSITORY / d'-e 's, [] [] , :,', e -s, [ ]. ,, ')> /root/docker.img

  3. 도커를 제거하십시오.

  4. / var / lib / docker에서 모든 것을 지 웁니다 : rm -rf / var / lib / docker / [cdintv] *

  5. 도커 재설치

  6. 도커 활성화 : systemctl enable docker

  7. 도커 시작 : systemctl start docker

  8. 이미지 복원 : docker load </root/docker.img

  9. 실행해야하는 영구 컨테이너를 시작하십시오.

이로 인해 디스크 사용량이 도커의 경우 67GB에서 도커의 경우 6GB로 줄었습니다.

나는 일상적인 사용을 위해 이것을 권장하지 않습니다. 그러나도 커가 소프트웨어 오류 또는 예기치 않은 재부팅에 사용 된 디스크 공간을 추적하지 못하는 것처럼 보이는 경우에 유용합니다.


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 image prune명령이 둔하고 최신 이미지에 필요한 모든 종속성을 제거하려고하기 때문에 위의 허용 된 솔루션에주의 하십시오 (명령은 docker image*s* prune) 로 이름이 변경되었을 수 있습니다.

도커 이미지 빌드 파이프 라인 (일일 빌드 및 태그 = 날짜 YYYYMMDD형식 이있는 곳)에 대한 해결책은 다음과 같습니다.

# carefully narrow down the image to be deleted (to avoid removing useful static stuff like base images)
my_deleted_image=mirekphd/ml-cpu-py37-vsc-cust

# define the monitored image (tested for obsolescence), which will be usually the same as deleted one, unless deleting some very infrequently built image which requires a separate "clock"
monitored_image=mirekphd/ml-cache

# calculate the oldest acceptable tag (date)
date_week_ago=$(date -d "last week" '+%Y%m%d')

# get the IDs of obsolete tags of our deleted image
# note we use monitored_image to test for obsolescence
my_deleted_image_obsolete_tag_ids=$(docker images --filter="before=$monitored_image:$date_week_ago" | grep $my_deleted_image | awk '{print $3}')

# remove the obsolete tags of the deleted image
# (note it typically has to be forced using -f switch)
docker rmi -f $my_deleted_image_obsolete_tag_ids


0

먼저 docker images이미지 목록을보고 IMAGE HASH ID를 클립 보드에 복사합니다.

운영 docker rmi -f <Image>

옵션 -f은 강제 삭제입니다.

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