В настоящее время я пишу микросервис в. 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. Любая помощь будет принята с благодарностью. Я могу предоставить любую необходимую информацию, будь то код или конфигурация.