我正在嘗試使用 Go 訪問 docker 注冊表(公共或私有)。一個簡單的程式,可以訪問任何注冊表并驗證影像是否存在。
我查看了 Go 中可用的 docker 客戶端https://pkg.go.dev/github.com/docker/[email protected] incompatible/client
但問題是,這個客戶端需要運行一個 docker 守護行程才能作業。有沒有辦法在不依賴底層 docker 引擎的情況下查詢 docker 注冊表(例如:hub.docker.com)?
我的想法是在 docker 容器上運行這個程式,并且容器內不會有任何 docker 引擎在運行。而且我不想在 docker 中運行 docker 或任何型別的 hack。我只想連接到注冊表并查詢影像。并且請不要在堆疊溢位中參考其他問題。沒有人回答過這個問題。
這是我到目前為止所做的
import (
"context"
"encoding/base64"
"encoding/json"
"fmt"
"github.com/docker/docker/api/types/filters"
"time"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
cli, err := client.NewClientWithOpts(client.WithHost("https://hub.docker.com"), client.WithAPIVersionNegotiation())
if err != nil {
fmt.Println(err.Error())
return
}
err = imagemanifest(cli)
if err != nil {
fmt.Println(err)
}
err = imageSearch(cli)
}
func imagemanifest(dockerClient *client.Client) error {
var authConfig = types.AuthConfig{
Username: "amokkara",
Password: "M@vr1ck2009",
ServerAddress: "https://index.docker.io/v2/",
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*1200)
defer cancel()
authConfigBytes, _ := json.Marshal(authConfig)
authConfigEncoded := base64.URLEncoding.EncodeToString(authConfigBytes)
ctx, cancel = context.WithTimeout(context.Background(), time.Second*1200)
defer cancel()
searchres , err := dockerClient.DistributionInspect(ctx,"amokkara/amokkara:3",authConfigEncoded)
if err != nil {
return err
}
fmt.Println(searchres.Descriptor.Digest.String())
return nil
}
如果我像這樣初始化客戶端
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
這是有效的,因為它使用底層 docker 守護行程(在我的例子中是 docker 桌面)來查詢注冊表。但是如果使用創建客戶端
client.NewClientWithOpts(client.WithHost("https://hub.docker.com"), client.WithAPIVersionNegotiation())
它未能給出 404 錯誤。此客戶端是否需要 docker 守護程式才能作業。如果是這樣,還有其他方法可以查詢注冊表嗎?請幫我解決一下這個。
uj5u.com熱心網友回復:
Skopeo是無需守護程式即可處理注冊表的領先軟體。
它也是用 Go 撰寫的。
你可以從inspect.go中獲得靈感
請注意,您不需要使用github.com/docker/docker/*模塊,但它將是github.com/containers/*,即https://github.com/containers/image
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/375337.html
標籤:码头工人 走 docker-registry
上一篇:通過帶有嵌套陣列的mongo-drivergolang查找檔案
下一篇:一年中的持續時間
