Docker

從私有 Docker 系統資料庫中刪除標籤的簡單方法?

  • July 23, 2021

我有一個私有 Docker 系統資料庫 v2.6.0,在圖像上包含多個標記版本:

foo/bar:1
foo/bar:1_keep    (same image as 1)
foo/bar:2
foo/bar:3
foo/bar:latest    (same image as 3)

我想刪除單個標籤而不必刪除圖像。因此,如果我刪除標籤 2,則可以刪除圖像,因為沒有其他內容涉及它。但是如果我刪除標籤 1,只有那個標籤應該去,而不是圖像。

這表明這樣的 API 請求:

DELETE http://repo/v2/foo/bar/tags/1

但這給了我一個 404。相反,我必須刪除清單,這意味著要檢查它是否未被另一個標籤使用。

我查看了https://github.com/fraunhoferfokus/deckschrubber的來源,它似乎並沒有為檢查是否可以安全刪除手稿而煩惱。我錯過了什麼嗎?

有沒有更好的方法來做到這一點?如果沒有,為什麼不呢?它可能會被修復嗎?

目前沒有用於刪除特定標籤的 api。從理論上講,您可以將新的(可能為空的)清單推送到現有標籤,然後將其刪除。否則,您需要跟踪清理常式中的所有標籤和清單,以確定可以安全刪除的內容。


更新:

標記刪除已添加到現在的 1.0 OCI 分發規範中。這樣,pull request (#3427)被批准分發/分發,這是系統資料庫圖像的上游。它是 3.0 版本的里程碑,因此這可能是將來添加的功能。

我也一直在研究實現標籤刪除 API 的regclient,然後退回到推送一個空的清單並刪除它。對於 CLI,regclient 包含 regctl,如下所示:

regctl tag rm registry:5000/repo:tag

引用自:https://serverfault.com/questions/872332