C# 如何通过Docker.Dotnet客户端对DockerHub上的私有回购进行身份验证?

C# 如何通过Docker.Dotnet客户端对DockerHub上的私有回购进行身份验证?,c#,.net,docker,dockerhub,C#,.net,Docker,Dockerhub,我目前正在用.NET标准编写一个microservice,它编写Dockerfile,构建与该Dockerfile关联的Docker映像(隐式生成一个pull映像),并将映像推送到私有Docker注册表。这些Docker操作都是使用MSFT维护的Docker.Dotnet库执行的。我相信这只是对Docker远程API调用的包装。此微服务的执行上下文位于AWS上托管的K8s集群中,或内部位于裸机上,具体取决于部署 以前我们的Docker注册表只是一个托管在Artifactory内部的私有注册表,但

我目前正在用.NET标准编写一个microservice,它编写Dockerfile,构建与该Dockerfile关联的Docker映像(隐式生成一个pull映像),并将映像推送到私有Docker注册表。这些Docker操作都是使用MSFT维护的Docker.Dotnet库执行的。我相信这只是对Docker远程API调用的包装。此微服务的执行上下文位于AWS上托管的K8s集群中,或内部位于裸机上,具体取决于部署

以前我们的Docker注册表只是一个托管在Artifactory内部的私有注册表,但我们正在迁移到私有DockerHub注册表/存储库/。这种迁移带来了一些身份验证问题

我们使用AuthConfig对所有拉和推操作进行身份验证,AuthConfig包含与注册表关联的帐户的用户名和密码。AuthConfig要么添加到参数对象,然后传递到调用:

imageBuildParameters.AuthConfigs = new Dictionary<string,
AuthConfig>() { { DockerEnvVariables.DockerRegistry, authConfig } };
ImagePushParameters imagePushParameters = new ImagePushParameters() { ImageID = image.Id, RegistryAuth = authConfig, Tag = "latest" };
_dockerClient.Images.PushImageAsync(RepoImage(image.Id), imagePushParameters, authConfig, this).GetAwaiter().GetResult();
或者它(奇怪的是,对我来说)既传入了一个参数,又单独传递给调用:

imageBuildParameters.AuthConfigs = new Dictionary<string,
AuthConfig>() { { DockerEnvVariables.DockerRegistry, authConfig } };
ImagePushParameters imagePushParameters = new ImagePushParameters() { ImageID = image.Id, RegistryAuth = authConfig, Tag = "latest" };
_dockerClient.Images.PushImageAsync(RepoImage(image.Id), imagePushParameters, authConfig, this).GetAwaiter().GetResult();
目前,我为DockerHub尝试的各种Docker注册表中的任何一个都出现了身份验证错误(我在其中编辑了组织/名称空间和图像: {“message”:“registry-1.docker.io//,存储库不存在或可能需要“docker login”:拒绝:请求的资源访问被拒绝”},“error”:拒绝对注册表-1.docker.io//,存储库不存在或可能需要“docker login”:拒绝:请求的资源访问被拒绝

我尝试过的DockerHub URL列表如下所示,均存在上述错误或其他“无效引用格式”错误:

  • Hub.docker.io
  • Hub.docker.io/v1/
  • Docker.io
  • Docker.io/v1/
  • Index.docker.io
  • Index.docker.io/v1/
  • Registry.hub.docker.com
  • 注册表-1.docker.io
奇怪的是,如果我在我的Windows系统上本地运行它,粗体URL实际上可以工作。但是,它们在部署到集群时都会失败(与Docker socket/npipe交互的不同方法?)

有人知道我需要设置正确的URL以正确验证DockerHub并与DockerHub交互吗?或者如果我当前对Docker.Dotnet库的实现和使用在某种程度上不正确吗?同样,它与Artifactory上的私有Docker注册表以及在本地Windows系统上运行时与DockerHub配合使用都很好。任何帮助都可以非常感谢。我可以提供更多必要的信息,无论是代码还是配置