Доступ к удаленному docker репозиторию с использованием Go - PullRequest
2 голосов
/ 16 января 2020

Мне нужен доступ к частному реестру docker с использованием Go и протокола V2. Мне нужно перечислить репозитории в личном реестре, получить все их теги и другую информацию. Должен ли я использовать Docker / Distribution / Registry / Client для этого? Есть ли образец для такой задачи? Я не могу его найти ... Официальный сайт предоставляет только документацию http api.

Я написал код:

    registry, err := client.NewRegistry("https://registry-1.docker.io/", http.DefaultTransport)
    if err != nil {
        log.Error("Error creating the registry: {}", err)
        return
    }

    ctx := context.Background()

    entries := make([]string, 5)

    numFilled, err := registry.Repositories(ctx, entries, "")
    if err != io.EOF {
        log.Error("Error getting the registry: {}", err)
        return
    }

    log.Info("Number of repositories: {}", numFilled)

    _ = registry

Конечно, репозиторий docker требует аутентификации. Но как мне это обеспечить? Есть ли do c для такой задачи?

1 Ответ

0 голосов
/ 16 января 2020

Вы можете запустить простой http-вызов (потому что это просто HTTP API) с заголовком auth, например, тегами списка выбранного изображения:

req, _ := http.NewRequest("GET", "https://"+privateDockerRegistry+"/v2/"+dockerImage+"/tags/list", nil)
req.Header.Add("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(os.Getenv("DOCKER_USER")+":"+os.Getenv("DOCKER_PASSWORD"))))
req.Header.Add("Accept", "application/json")
resp, _ := client.Do(req)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...