developer tip

Docker 제거

copycodes 2020. 10. 14. 07:56
반응형

Docker 제거 TAG 이미지


root@server:~# docker images -a        
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>                  <none>              5e2dfc857e73        5 days ago          261.6 MB
<none>                  <none>              d053e988f23d        5 days ago          261.6 MB
<none>                  <none>              1d5d4a2d89eb        5 days ago          261.6 MB
<none>                  <none>              ea0d189fdb19        5 days ago          100.5 MB
<none>                  <none>              26c6175962b3        5 days ago          100.5 MB
<none>                  <none>              73d5cec4a0b3        5 days ago          100.5 MB
<none>                  <none>              e19590e1bac1        5 days ago          100.5 MB

나는 다음을 시도했다 :

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

그리고 다음 :

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

다음 오류가 발생합니다.

docker: "rmi" requires a minimum of 1 argument.
See 'docker rmi --help'.

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

태그가없는 이미지 만 시도하고 나열 할 수 있습니다 (라벨이 없거나 태그가없는 이미지).

docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'

그러나 태그가 지정되지 않은 이미지 중 일부는 다른 사용자에게 필요할 수 있습니다.

매달린 이미지 만 제거하는 것을 선호합니다 .

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

2016 년 9 월 " 오래되고 사용하지 않는 Docker 이미지를 제거하는 방법 "에서 docker 1.13+에 대해 언급했듯이 다음 image prune명령을 수행 할 수도 있습니다 .

docker image prune

즉, Janaka Bandara의견에서 언급합니다 .

이것은 나를 위해 태그가 지정된 이미지를 제거 하지 않았습니다<none> (예 :) foo/bar:<none>; 나는 사용해야 docker images --digests했고docker rmi foo/bar@<digest>

Janaka Paul V. Novarese 에서 " 태그가있는 서명 된 이미지를 제거하는 방법 "을 참조합니다 .

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              459769dbc7a1        5 days ago          4.461 MB

진단 단계

--digests=true옵션 을 사용하면이 두 항목의 차이점을 확인할 수 있습니다 (태그없는 항목에는 Docker Content Trust 서명 다이제스트가 있음).

# docker images --digests=true
REPOSITORY               TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              <none>                                                                    459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00   459769dbc7a1        5 days ago     

Paul은 moby 문제 18892 도 언급했습니다 .

서명 된 이미지를 가져온 후 <none>" docker images"출력 에 " 추가"항목 (태그 포함 )이 있습니다.
이것은 rmi이미지를 어렵게 만듭니다 (강제하거나 그렇지 않으면 먼저 올바르게 태그가 지정된 항목을 삭제하거나 다이제스트로 삭제해야합니다.


docker images | grep none | awk '{ print $3; }' | xargs docker rmi

간단하게 시도 할 수 있습니다.


docker image prune 은 매달린 이미지 (태그 없음)를 모두 제거합니다. docker image prune -a는 해당 이미지를 사용하는 컨테이너가없는 이미지도 제거합니다.

매달린 이미지와 사용되지 않은 이미지의 차이점은 이 stackoverflow 스레드 에서 설명 합니다 .


'댕글 링'필터가 더 이상 작동하지 않는지 확인할 수 있습니다.

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'

Docker 시스템 정리사용 하여 매달린 이미지 제거

$ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N]

--force확인 프롬프트가 아닌 경우 사용할 수 있습니다.

$ docker system prune --force

갈 수 있습니다 docker rmi $(docker images -f "dangling=true" -q). 더 많은 옵션 이미지 문서 를 참조하세요.

$ docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
<none>                      <none>              94870cda569b        4 seconds ago       673MB
python                      2.7                 320a06f42b5f        10 days ago         673MB
mysql                       latest              e799c7f9ae9c        2 months ago        407MB
gcavalcante8808/semaphore   latest              86e863e11461        2 months ago        537MB
redis                       latest              e32ef7250bc1        2 months ago        184MB
rabbitmq                    3.6.9-management    7e69e14cc496        2 months ago        179MB
rabbitmq                    3.6.9               eb2e4968538a        2 months ago        179MB
jordan/rundeck              latest              6d40b57b1572        2 months ago        660MB
rabbitmq                    3.5.6-management    dbfe8d18809a        19 months ago       304MB

$ docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true)
Deleted: sha256:94870cda569b8cf5f42be25af107d464c993b4502a1472c1679bf2d213b6c0a6

docker 문서 에 따르면 태그가없는 (매달린) 이미지 만 나열 할 수 있습니다.

$ docker images -f "dangling=true"

다음과 docker rmi같은 명령으로 리디렉션하십시오 .

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

Notice -q param thats only show numeric IDs of containers.


I have found docker image prune -f most useful and I use it all the time during my day to day work, using the tag -f will not prompt for confirmation. More details here


Remove images which have none as the repository name using the following:

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

Remove images which have none tag or repository name:

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

To remove dangling images please use :

docker image rm $(docker images --format "{{.ID}}" --filter "dangling=true")

Please refer to my answer here for a more detailed description : https://unix.stackexchange.com/a/445664/292327


The below command is working for me. this is just simple grep "" images and get the docker image id and removed all the images. Simple single command as it has to.

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


docker system prune will do the trick, it removes

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

But use it, with the caution!


Its simple and clear,

Even I took 3 days to understand this simple and crisp error.

The docker image is not built successfully

Step 7/13 : COPY jupyter_notebook_config.py /root/.jupyter/
 ---> bf29ce6fe6dc
Step 8/13 : COPY notebooks /notebooks
COPY failed: stat /var/lib/docker/tmp/docker-builder776981166/notebooks: no such file or directory
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              bf29ce6fe6dc        9 seconds ago       1.27GB
ubuntu              16.04               a51debf7e1eb        3 weeks ago         116MB

Then I removed the 8th line from Dockerfile, it was signal success this time.

Successfully built b6724370f8ca
Successfully tagged dem:expo
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker run -it -p 8888:8888 dem:expo
[I 06:11:38.984 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 06:11:39.011 NotebookApp] Serving notebooks from local directory: /
[I 06:11:39.011 NotebookApp] The Jupyter Notebook is running at:
[I 06:11:39.011 NotebookApp] http://(296d81166725 or 127.0.0.1):8888/?token=496feb282ef749c05277ef57a51e8a56fedb1c6b337b9f92

It says successfully tagged dem:expo, this line is imp during docker process.


This is an extension of tansadio's answer:

If you are getting following error:

Error response from daemon: conflict: unable to delete <> (must be forced) - image is being used by stopped container <>

You can force it with --force:

docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force

docker rmi -f $(docker images -a|awk 'NR > 1 && $2 == "" {print $3}')


Following will remove all <none> images

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

You can force removal by changing docker rmi to docker rmi -f although I do not recommend doing that.

Some of the <none> images could be related to other images so to be on safe side don't use -f tag.


try

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , while there may be cleaner commands

Updated


Just remove the images using their IDs:

# docker rmi 5e2dfc857e73 d053e988f23d ...

The dangling images are ghosts from the previous builds and pulls, simply delete them with : docker rmi $(docker images -f "dangling=true" -q)


docker rmi $(docker images -a -q)

Stated the following images where in use. I think this command gets rid of unwanted images.

참고URL : https://stackoverflow.com/questions/33913020/docker-remove-none-tag-images

반응형