Docker 刪除所有 tag 為 None 的 image,通常是在清理 docker images 裡顯示為 <none> 的 dangling images。最直接的做法是先用 docker images --filter "dangling=true" 確認清單,再用 docker image prune 或我當時的筆記保留的 docker rmi $(...) 指令移除。
Docker tag 為 None 的 image 是什麼?
Docker tag 為 None 的 image 通常指沒有 repository/tag 參照的 dangling image。這類 image 常出現在重新 build 映像檔後,舊 layer 或舊 image 不再被 tag 指向。
在 Docker CLI 顯示裡,常見畫面會是 REPOSITORY 與 TAG 都出現 <none>。Docker 官方文件把 docker image prune 描述為移除 dangling images;若加上 -a,才會移除所有未被 container 使用的 images(Docker Docs,存取日期:2026-08-28)。
清理前先分清楚兩件事:
| 類型 | 常見顯示 | 建議處理方式 |
|---|---|---|
| dangling image | <none>:<none> | 可用 docker image prune 清理 |
| unused image | 有 tag,但沒有 container 使用 | 需用 docker image prune -a,風險較高 |
| container 正在使用的 image | 可能有 tag,也可能用 image ID | 先確認 container 狀態,不要直接強制刪除 |
如何列出所有未被 tag 的 Docker image?
列出未被 tag 的 Docker image,我當時的筆記使用 docker inspect 搭配 grep -v ':' 找出沒有 RepoTags 的 image。現在更建議先用 Docker 內建 filter 查詢 dangling images。
我當時的筆記指令如下,保留不改:
docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'
較容易閱讀的檢查方式:
docker images --filter "dangling=true"
只列出 image ID:
docker images --filter "dangling=true" -q --no-trunc
資訊增益:如果只是要找 <none> image,先用 docker images --filter "dangling=true" 比用 grep 安全。grep -v ':' 是從輸出文字推測狀態,Docker filter 則是直接讓 Docker CLI 用 image metadata 篩選。
如何刪除所有 tag 為 None 的 Docker image?
刪除 tag 為 None 的 Docker image,可以使用我當時的筆記的 docker rmi $(docker images --filter "dangling=true" -q --no-trunc)。更簡潔的現代寫法是 docker image prune。
我當時的筆記指令如下,保留不改:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
Docker 官方建議的清理 dangling images 指令:
docker image prune
若不想被互動提示中斷,可加上 -f:
docker image prune -f
docker image rm(別名 docker rmi)會移除指定 image;如果 image 仍被多個 tag 或 container 參照,Docker 會阻止刪除或要求更明確的處理方式(Docker Docs,存取日期:2026-08-28)。
清理前要怎麼避免誤刪?
Docker image 清理前應先看清楚 filter 範圍。docker image prune 只清 dangling images;docker image prune -a 會清掉所有未被 container 使用的 images,包含仍有 tag 的 image。
建議流程:
docker images --filter "dangling=true"
docker image prune
如果你要寫進 CI、部署主機維護腳本或排程,建議用較明確的版本:
docker images --filter "dangling=true" -q --no-trunc
docker image prune -f
不要一開始就加 -a。docker image prune -a 的清理範圍是「沒有被任何 container 參照的 images」,不是只清 <none> image;在需要快速 rollback 的主機上,這可能會把仍想保留的舊版 tag 一起清掉。
常見問題
Docker tag 為 None 的 image 清理問題,常見焦點在 <none> 是否等於 dangling、docker rmi 和 docker image prune 怎麼選,以及 production 主機是否能自動清理。
Docker 的 <none> image 一定可以刪除嗎?
不一定。多數 <none>:<none> image 是 dangling images,可以清理;但清理前仍應確認沒有重要 container 依賴特定 image ID。Production 主機尤其建議先列出清單,再執行刪除。
docker image prune 和 docker rmi $(...) 有什麼差別?
docker image prune 是 Docker CLI 內建的 unused image 清理指令,預設清 dangling images。docker rmi $(...) 是先查出 image ID,再交給 docker rmi 刪除;我當時的筆記指令可用,但可讀性和錯誤處理都比 docker image prune 差。
docker image prune -a 可以取代清理 None tag image 嗎?
不建議直接取代。docker image prune -a 會刪除所有未被 container 使用的 images,不只刪除 tag 為 None 的 image。若主機需要保留舊版 image 供 rollback,請避免在不確認清單的情況下使用 -a。
為什麼重新 build Docker image 後會出現 <none>?
重新 build 同一個 tag 時,新的 image 會接上原本的 tag,舊 image 失去 tag 後就可能顯示為 <none>。這通常不是錯誤,而是 Docker image lifecycle 的正常結果。
可以把 Docker None tag image 清理寫成 crontab 嗎?
可以,但建議只排程 docker image prune -f,並把輸出寫入 log。若要使用 docker image prune -a -f,應先確認主機不依賴本機保留舊版 image 進行 rollback。
參考資料
- Docker Docs:docker image prune(存取日期:2026-08-28)
- Docker Docs:docker image rm(存取日期:2026-08-28)
- Docker Docs:docker image(存取日期:2026-08-28)
- Stack Overflow:Docker remove
<none>tag images(我當時的筆記參考來源,存取日期:2026-08-28)
延伸閱讀
- docker pull failed to register layer 錯誤怎麼解?:同樣聚焦 Docker、DevOps,可接著比較不同情境的做法。
- Dockerfile 簡單範例:從零打造你的第一個 Docker Image:同樣聚焦 Docker、DevOps,可接著比較不同情境的做法。
- Docker 初探:安裝、常用指令與容器管理入門筆記:同樣聚焦 Docker、DevOps,可接著比較不同情境的做法。
最後更新
本文最後更新於 2026-08-28。我當時的筆記發布於 2021-11-06,本文保留當時的 Docker 指令,並補上 docker image prune、清理範圍差異與清理前檢查流程。
關於作者
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2021-11-06
