Linux 指令列與 DevOps 操作示意圖

← INSIGHTS & PERSPECTIVES | DevOps

Docker 刪除所有 tag 為 None 的 image:清理 dangling images 指令

整理 Docker 如何找出並刪除 tag 為 None 的 image,保留我當時的筆記指令,補上 docker image prune 與清理前檢查方式。

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 顯示裡,常見畫面會是 REPOSITORYTAG 都出現 <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

不要一開始就加 -adocker image prune -a 的清理範圍是「沒有被任何 container 參照的 images」,不是只清 <none> image;在需要快速 rollback 的主機上,這可能會把仍想保留的舊版 tag 一起清掉。

常見問題

Docker tag 為 None 的 image 清理問題,常見焦點在 <none> 是否等於 dangling、docker rmidocker image prune 怎麼選,以及 production 主機是否能自動清理。

QDocker 的 <none> image 一定可以刪除嗎?

不一定。多數 <none>:<none> image 是 dangling images,可以清理;但清理前仍應確認沒有重要 container 依賴特定 image ID。Production 主機尤其建議先列出清單,再執行刪除。

Qdocker image prunedocker rmi $(...) 有什麼差別?

docker image prune 是 Docker CLI 內建的 unused image 清理指令,預設清 dangling images。docker rmi $(...) 是先查出 image ID,再交給 docker rmi 刪除;我當時的筆記指令可用,但可讀性和錯誤處理都比 docker image prune 差。

Qdocker image prune -a 可以取代清理 None tag image 嗎?

不建議直接取代。docker image prune -a 會刪除所有未被 container 使用的 images,不只刪除 tag 為 None 的 image。若主機需要保留舊版 image 供 rollback,請避免在不確認清單的情況下使用 -a

Q為什麼重新 build Docker image 後會出現 <none>

重新 build 同一個 tag 時,新的 image 會接上原本的 tag,舊 image 失去 tag 後就可能顯示為 <none>。這通常不是錯誤,而是 Docker image lifecycle 的正常結果。

Q可以把 Docker None tag image 清理寫成 crontab 嗎?

可以,但建議只排程 docker image prune -f,並把輸出寫入 log。若要使用 docker image prune -a -f,應先確認主機不依賴本機保留舊版 image 進行 rollback。

參考資料

延伸閱讀

最後更新

本文最後更新於 2026-08-28。我當時的筆記發布於 2021-11-06,本文保留當時的 Docker 指令,並補上 docker image prune、清理範圍差異與清理前檢查流程。

關於作者

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2021-11-06