docker images 無法刪除解決方式

今天筆者想要把 docker image 刪掉時,出現以下錯誤訊息:
    
$ docker rmi bf3cdda3c9c4
Error response from daemon: conflict: unable to delete bf3cdda3c9c4 (cannot be forced) - image has dependent child images
    

這個問題很常見,就是因為這個 image 是其他 image 的基底,所以要先把依賴此 image 的其他相關 image 和容器都刪掉,才有辦法。

但問題是筆者已經把 docker ps -a, docker images 兩個指令都找過了,還沒有找到依賴的 image

正打算使用筆者秘密筆記裡面的招式 docker image prune -f 直接結束這回合時,突然想到,如果這個可以刪掉隱藏的內容釋放空間,那平時到底要怎麼看哪裡有隱藏的 image?

經過一翻研究,其實就只是開啟 docker docs 官方文件,答案意外的簡單:
Untagged (dangling) images are also hidden by default. Use the -a (--all) flag to show intermediate layers and dangling images.

所有無名 images 都會被隱藏,使用 -a 參數來顯示

也就是 docker images 和 docker ps 一樣,兩個都有一個 -a 參數可以使用,可以列出隱藏的 images (以下是擷取部分內容)
    
docker images -a
IMAGE                                                                                                           ID             DISK USAGE   CONTENT SIZE   EXTRA       
<untagged>                                                                                                      f7f847ff147f       20.6GB             0B        
<untagged>                                                                                                      91c771c88aa4       30.8GB             0B        
<untagged>                                                                                                      1db986bde0dd       20.6GB             0B        
<untagged>                                                                                                      1c5504ab7684         24GB             0B        
<untagged>                                                                                                      bad86a06b554       20.7GB             0B        
<untagged>                                                                                                      1a7632fed8e6       23.9GB             0B        
<untagged>                                                                                                      6fe9a7a6687e       20.6GB             0B    
    

真的是不看不知道,一看嚇一跳,在這台電腦裏面有 370G 被無名 images 佔用了, 執行 docker rmi 逐一刪除即可
    
docker rmi f7f847ff147f  
    

當然,前面提到的密技也有類似的效果,可以一次刪除所有沒有標籤、沒有正在被使用的 images
    
docker image prune -f




參考資料:
Docker docs - docker image ls

留言