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 顯示裡,常見畫面會是 `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 主機是否能自動清理。

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

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

Q`docker image prune` 和 `docker rmi $(...)` 有什麼差別?

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

Q`docker 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`、清理範圍差異與清理前檢查流程。

關於作者 {#author}

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

首次發布:2021-11-06