簡體   English   中英

如何通過標簽刪除 docker 鏡像<none>和存儲庫名稱?</none>

[英]How can I delete a docker images by their tag <none> and repository name?

我想問一下是否可以刪除其標簽或創建的標簽的 docker 圖像,我有這樣的事情:

Repository                     TAG             IMAGE_ID       CREATED          SIZE

registry.someRegistry.         latest          fa8767676       5 hours ago     119MB
registry.someRegistry.         <none>          878787874       29 hours ago    119MB
registry.someRegistry.         <none>          jkj7jjjk4       2 days ago      119MB
registry.someRegistry.         <none>          d99090iii       3 days ago      119MB

我需要刪除所有圖像但不是最近的圖像,在這種情況下是標記為最新的圖像或具有最近創建日期的圖像。 我可以使用下一個命令刪除所有圖像,直到創建 5 小時,但這不合適,因為我可以刪除更多圖像而不僅僅是最后一個圖像,最好按 tag=latest 刪除圖像。

docker image prune -a --force --filter "until=5h"

我認為我還需要一個額外的注冊表過濾器,以便只刪除我需要的注冊表的圖像。

有什么好的方法可以實現嗎?

最簡單的是rmi命令,即:

docker rmi 878787874

這是一個“刪除圖像”命令,使用您列出的 IMAGE_ID。

您可以使用過濾器刪除懸空圖像

 docker images --filter dangling=true

沒有一個回復有幫助,而且似乎也沒有另一個線程。 為時已晚,但我遇到了同樣的問題並找到了這個解決方案:

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

這不是 100% 的證明,因為grep在名稱標簽中查找字符串,因此理論上如果您的注冊表名稱出現在某個標簽中,反之亦然,您可能會不小心將其刪除。

可以從一個特定的存儲庫中找到所有懸掛圖像

docker images repository --filter dangling=true

如果你想根據注冊表過濾多個存儲庫,也可以這樣做

docker images --filter=reference='registry/someRegistry/*:*' --filter dangling=true

一旦你有了你想要刪除的列表,你可以這樣做:

docker rmi $(docker images --filter=reference='registry/someRegistry/*:*' --filter dangling=true -q)

編輯以添加通配符*不適用於/ ,因此如果注冊表具有更復雜的文件夾結構,則應將表達式修改為類似

'registry/someRegistry/*/*:*'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM