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。
我當時的筆記指令如下,保留不改:
```bash
docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'
```
較容易閱讀的檢查方式:
```bash
docker images --filter "dangling=true"
```
只列出 image ID:
```bash
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`。
我當時的筆記指令如下,保留不改:
```bash
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
```
Docker 官方建議的清理 dangling images 指令:
```bash
docker image prune
```
若不想被互動提示中斷,可加上 `-f`:
```bash
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。
建議流程:
```bash
docker images --filter "dangling=true"
docker image prune
```
如果你要寫進 CI、部署主機維護腳本或排程,建議用較明確的版本:
```bash
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)
最後更新
本文最後更新於 2026-08-28。我當時的筆記發布於 2021-11-06,本文保留當時的 Docker 指令,並補上 `docker image prune`、清理範圍差異與清理前檢查流程。
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2021-11-06
