Как пройти аутентификацию с помощью частного репо на DockerHub через клиент Docker .Do tnet? - PullRequest
1 голос
/ 16 марта 2020

В настоящее время я пишу микросервис в. NET Стандарт, который записывает Dockerfile, создает образ Docker, связанный с этим Dockerfile (который неявно вызывает извлечение образа), и передает изображение в частный реестр Docker , Все эти операции Docker выполняются с использованием библиотеки Docker .Do tnet, которую поддерживает MSFT. Я считаю, что это в основном просто оболочка для вызовов к Docker Remote API. Контекст выполнения этого микросервиса находится в кластере K8s, размещенном на AWS, или внутренне на голом железе, в зависимости от развертывания.

Ранее наш реестр Docker был только частным реестром, размещенным на Artifactory. внутренне, но мы мигрируем в частный реестр / репозиторий DockerHub /. С этой миграцией возникли некоторые проблемы с аутентификацией.

Мы аутентифицируем все операции pull и pu sh с помощью AuthConfig, который состоит из имени пользователя и пароля для учетной записи, связанной с реестром. AuthConfig либо добавляется в объект Parameters, а затем передается в вызов:

imageBuildParameters.AuthConfigs = new Dictionary<string,
AuthConfig>() { { DockerEnvVariables.DockerRegistry, authConfig } };

using (var responseStream = _dockerClient.Images.BuildImageFromDockerfileAsync(tarball, imageBuildParameters).GetAwaiter().GetResult())

Или (как это ни странно) передается как в параметре, так и отдельно на звонок:

ImagePushParameters imagePushParameters = new ImagePushParameters() { ImageID = image.Id, RegistryAuth = authConfig, Tag = "latest" };
_dockerClient.Images.PushImageAsync(RepoImage(image.Id), imagePushParameters, authConfig, this).GetAwaiter().GetResult();

В настоящее время мы получаем ошибки аутентификации для любого из Docker реестров, которые я пробовал для DockerHub, как таковых (где я отредактировал пространство / имя организации и изображение: {«Message»: «получить доступ к реестру-1. docker .io // запрещено, хранилище не существует или может потребоваться« docker login »: отказано: запрошенный доступ к ресурсу запрещен»}, «ошибка »:« Извлечение доступа запрещено для реестра 1. docker .io //, хранилище не существует или может потребоваться «docker вход в систему»: отказано: запрошенный доступ к ресурсу запрещен »

Ниже приведен список URL-адресов DockerHub, которые я пробовал, все с ошибкой выше или с другой ошибкой «Недопустимый формат ссылки»:

  • Hub. docker .io
  • Hub. docker .io / v1 /
  • Docker .io
  • * 10 57 * .io / v1 /
  • Index. docker .io
  • Index. docker .io / v1 /
  • Registry.hub. docker. com
  • registry-1. docker .io

Как ни странно, если я запускаю его локально в моей системе Windows, выделенный URL-адрес действительно работает. Тем не менее, все они терпят неудачу при развертывании в кластере (другой метод взаимодействия с Docker socket / npipe?).

Кто-нибудь знает правильный URL-адрес, который мне нужно установить для правильной аутентификации и взаимодействия с DockerHub? Или если моя текущая реализация и использование библиотеки Docker .Do tnet неверны? Опять же, он прекрасно работает с частным реестром Docker в Artifactory, а также с DockerHub при запуске в моей локальной системе Windows. Любая помощь будет принята с благодарностью. Я могу предоставить любую необходимую информацию, будь то код или конфигурация.

...