Docker xóa <none> TAG hình ảnh


139
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

Tôi đã thử những cách sau:

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

Và những điều sau đây:

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

Gặp lỗi sau:

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

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

Remove one or more images

Hơi muộn nhưng tôi phải thêm nhận xét này cho những người dùng khác. Nếu bạn sử dụng Windows Command Prompt, điều này sẽ không hoạt động. Bởi vì Command Prompt không hỗ trợ các chức năng bên trong. Hãy thử các dòng chính xác với Windows PowerShell
er-han

1
docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
Ondra Žižka

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

5
docker rmi $(docker images -f dangling=true -q)
Jinna Balu

@Karl Morrison: Bạn đã gần đến nơi: chỉ bỏ lỡ -a (- tất cả) trong docker images:)
mirekphd

Câu trả lời:


202

Bạn có thể thử và chỉ liệt kê những hình ảnh không được gắn thẻ (những hình ảnh không có nhãn hoặc có nhãn không có thẻ):

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

Tuy nhiên, một số hình ảnh chưa được gắn thẻ đó có thể được những người khác cần.

Tôi chỉ thích xóa những hình ảnh lủng lẳng :

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

Như tôi đã đề cập cho docker 1.13+ vào tháng 9 năm 2016 trong " Cách xóa hình ảnh Docker cũ và không sử dụng ", bạn cũng có thể thực hiện image prunelệnh :

docker image prune

Điều đó đang được nói, Janaka Bandara đề cập trong các bình luận :

Điều này đã không loại bỏ <none>các hình ảnh được gắn thẻ cho tôi (ví dụ foo/bar:<none>:); Tôi đã phải sử dụng docker images --digestsdocker rmi foo/bar@<digest>

Janaka tham khảo " Cách xóa hình ảnh đã ký có thẻ " từ 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

Các bước chẩn đoán

Bạn có thể thấy sự khác biệt trong hai mục nhập này nếu bạn sử dụng --digests=truetùy chọn (mục nhập không được gắn thẻ có thông báo chữ ký 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     

Lưu ý rằng Paul cũng đề cập đến vấn đề moby 18892 :

Sau khi kéo một hình ảnh có chữ ký, có một mục "bổ sung" (có thẻ <none>) trong docker imagesđầu ra "".
Điều này gây khó khăn cho rmihình ảnh (bạn phải buộc nó, nếu không, trước tiên hãy xóa mục nhập được gắn thẻ thích hợp hoặc xóa theo thông báo.


6
Điều này không xóa <none>hình ảnh được gắn thẻ cho tôi (ví dụ foo/bar:<none>); Tôi đã phải sử dụng docker images --digestsdocker rmi foo/bar@<digest>như đã mô tả ở success.docker.com/KBase/...
Janaka Bandara

1
@JanakaBandara Cảm ơn bạn. Tôi đã bao gồm nhận xét của bạn trong câu trả lời (với một số liên kết bổ sung)
VonC

cho tôisudo docker rmi $(docker images --filter "dangling=true" -q --no-trunc) Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/json?filters=%7B%22dangling%22%3A%7B%22true%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied "docker rmi" requires at least 1 argument. See 'docker rmi --help'. Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] [flags] Remove one or more images
Jamie Hutber

@JamieHutber "docker rmi" yêu cầu ít nhất 1 đối số. Điều đó cho thấy hình ảnh docker --filter "dangling = true" -q --no-trunc không trả về gì, nghĩa là không có hình ảnh treo lơ lửng?
VonC

Cảm ơn VonC thực sự nó khônghutber@hutber-blade /var/www/dockerfile-wizard $ sudo docker images --filter "dangling=true" -q --no-trunc sha256:c58f4e4b10b1f862d78f96e90bdf13ffe37993279d0992be46d5c15dad51421e sha256:db28e821bc3f337caf711a664bc529be5db8894dd73c5b013ad814cc1e9fc21b sha256:257936750a7d43ae77c713c2cb18342be935de7d3b8fad23d6664fc64acfe753 sha256:6b815cefeb527885b2b9dd831f7f40b05942f00d1367274833a6274154d8ce43
Jamie Hutber

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

Bạn có thể thử điều này một cách đơn giản


1
Giải pháp nhanh nhất và dễ dàng nhất cho tôi
Đánh dấu

Phải thêm --forcevào cuối. Vì vậy, lệnh sẽ giống như- docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh

23

công cụ cắt tỉa hình ảnh docker loại bỏ tất cả các hình ảnh treo lơ lửng (những hình ảnh không có thẻ). docker hình ảnh sơ lược -a cũng sẽ loại bỏ bất kỳ hình ảnh nào không có vùng chứa sử dụng chúng.

Sự khác biệt giữa hình ảnh treo lơ lửng và không sử dụng được giải thích trong luồng stackoverflow này .


6

Bạn có thể đi docker rmi $(docker images -f "dangling=true" -q). Xem tài liệu hình ảnh để có thêm tùy chọn.

$ 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

5

Theo tài liệu của docker, bạn chỉ có thể liệt kê các hình ảnh không được gắn thẻ (treo lủng lẳng) với

$ docker images -f "dangling=true"

và chuyển hướng họ đến docker rmilệnh như vậy:

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

Lưu ý -qtham số chỉ hiển thị ID số của vùng chứa.


1
Nó không giống với những gì tôi đã đề xuất trong câu trả lời của mình vào năm 2015?
VonC

5

Bạn có thể kiểm tra xem bộ lọc 'treo lơ lửng' không hoạt động nữa hay không

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

Sử dụng công cụ cắt tỉa hệ thống docker để loại bỏ các hình ảnh treo lơ lửng

$ 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]

Bạn có thể sử dụng --forceđể không nhắc xác nhận

$ docker system prune --force

4

Tôi thấy nó docker image prune -fhữu ích nhất và tôi sử dụng nó mọi lúc trong ngày làm việc, sử dụng thẻ -fsẽ không nhắc bạn xác nhận. Thêm chi tiết tại đây


4

Chỉ cần chạy lệnh này:

docker image prune --filter="dangling=true"

3

Loại bỏ hình ảnh có nonetên kho lưu trữ bằng cách sử dụng như sau:

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

Xóa hình ảnh có nonethẻ hoặc tên kho lưu trữ:

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


2

docker system prune sẽ thực hiện thủ thuật, nó loại bỏ

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

Nhưng sử dụng nó, một cách thận trọng!


2

Để xóa tất cả hình ảnh, nonechúng tôi phải đảm bảo rằng chúng tôi đã xóa tất cả các vùng chứa đã dừng mà chúng có thể sử dụng chạy:

docker rm $(docker ps -a -q)

thì chúng tôi có thể xóa tất cả hình ảnh:

docker image prune


1

Lệnh dưới đây đang làm việc cho tôi. đây chỉ là những hình ảnh grep "" đơn giản và lấy id hình ảnh docker và xóa tất cả hình ảnh. Lệnh đơn đơn giản như nó phải làm.

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


1

Đây là phần mở rộng của câu trả lời của tansadio:

Nếu bạn gặp lỗi sau:

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

Bạn có thể buộc nó bằng --force:

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

1

Thao tác sau sẽ xóa tất cả <none>hình ảnh

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

Bạn có thể buộc xóa bằng cách thay đổi docker rmithành docker rmi -fmặc dù tôi không khuyên bạn nên làm điều đó.

Một số <none>hình ảnh có thể liên quan đến các hình ảnh khác nên để an toàn, đừng sử dụng -fthẻ.


0

Nó đơn giản và rõ ràng,

Thậm chí tôi đã mất 3 ngày để hiểu lỗi đơn giản và rõ ràng này.

Hình ảnh docker không được tạo thành công

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

Sau đó, tôi đã xóa dòng thứ 8 khỏi Dockerfile, đó là tín hiệu thành công lần này.

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

Nó cho biết đã gắn thẻ thành công dem: expo, dòng này là hiển thị trong quá trình docker.


0

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


0

Tất cả

Chia sẻ lệnh PowerShell cho những người yêu thích Windows (đề phòng trường hợp bạn không có bash, grep hoặc awk)

(docker images) -like '*<none>*' | ForEach-Object { 
  $imageid=($_ -split "\s+")[2]
  docker rmi -f $imageid
}


0

Xóa tất cả các vùng chứa đã thoát

docker rm $(docker container ls -a -f status=exited -q)

hoặc loại bỏ các thùng chứa theo một mẫu

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

0

hãy thử điều này để xem danh sách ID hình ảnh docker có thẻ <none>

docker images -a | awk '/^<none>/ {print $3}'

và sau đó bạn có thể xóa tất cả hình ảnh có thẻ <none>. điều này đã làm việc cho tôi.

docker rmi $(docker images -a | awk '/^<none>/ {print $3}')

0

100% hoạt động: hình ảnh docker | grep none | awk '{print $ 3}' | xargs docker rmi -f


-1

thử

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , trong khi có thể có các lệnh rõ ràng hơn

Đã cập nhật


1
Điều đó cũng sẽ loại bỏ các hình ảnh không được gắn thẻ <none>, đây là một nono lớn.
K - Độc tính trong SO ngày càng lớn.

Tôi đã cập nhật câu trả lời của mình
user2915097

Lệnh docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}không làm gì cả!
K - Độc tính trong SO ngày càng lớn.

-1

Chỉ cần xóa hình ảnh bằng cách sử dụng ID của chúng:

# docker rmi 5e2dfc857e73 d053e988f23d ...

-2

Các hình ảnh treo lơ lửng là bóng ma từ các bản dựng và kéo trước đó, chỉ cần xóa chúng bằng: docker rmi $ (docker images -f "dangling = true" -q)


OP nói rằng anh ta đã thử lệnh chính xác này nhưng nó không thành công. Ngoài ra, câu trả lời này đã được đưa ra ít nhất hai lần.
CaringDev

-5
docker rmi $(docker images -a -q)

Nêu các hình ảnh sau đây được sử dụng. Tôi nghĩ rằng lệnh này sẽ loại bỏ các hình ảnh không mong muốn.


2
Điều này không xóa tất cả các hình ảnh?
marianobianchi

3
điều này sẽ loại bỏ tất cả các hình ảnh không sử dụng và nó sẽ không được đánh dấu là câu trả lời đúng.
Ghashange
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.