我們在使用docker的過程中,經常會發現 docker images 列出的鏡像中有很多這樣的鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d1f6013eddfa 6 days ago 525MB
這些鏡像往往是由於構建過程出現錯誤異常終止而殘留下來的,如何能夠批量刪除這種鏡像呢?
在網上搜一下,發現大多數都是利用grep和awk來做的,這種做法存在一個問題,就是會把docker images輸出的title也作爲參數傳遞給docker rmi命令。其實docker的原生命令中就支持這種過濾,例如我們可以使用如下命令:
docker rmi $(docker images -f 'dangling=true' -q)
其中,docker rmi 命令支持傳遞多個image作爲參數批量刪除;而docker images 命令支持使用 ‘dangling=true’ 這個filter來過濾出所有 tag 是 none的鏡像(-f 等同於 --filter,是添加過濾器的意思),docker images 的 -q 選項表示只輸出鏡像ID。
docker images命令目前支持的filter有:
The currently supported filters are:
dangling (boolean - true or false)
label (label=<key> or label=<key>=<value>)
before (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created before given id or references
since (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created since given id or references
reference (pattern of an image reference) - filter images whose reference matches the specified pattern
關於 docker images filter 的用法,可以參考官方文檔:https://docs.docker.com/v17.12/engine/reference/commandline/images/#filtering