c# - 如何通过 Docker.Dotnet 客户端对 DockerHub 上的私有仓库进行身份验证?
问题描述
我目前正在.NET Standard 中编写一个微服务,它编写一个 Dockerfile,构建与该 Dockerfile 关联的 Docker 映像(这会隐式导致拉取映像),并将映像推送到私有 Docker 注册表。这些 Docker 操作都是使用 MSFT 维护的 Docker.Dotnet 库执行的。我相信这主要是对 Docker Remote API 调用的封装。此微服务的执行上下文位于 AWS 上托管的 K8s 集群中,或者在内部裸机上,具体取决于部署。
以前我们的 Docker 注册表只是内部托管在 Artifactory 上的私有注册表,但我们正在迁移到私有 DockerHub 注册表/存储库/。这种迁移带来了一些身份验证问题。
我们使用 AuthConfig 对所有拉取和推送操作进行身份验证,该 AuthConfig 由与注册表关联的帐户的用户名和密码组成。AuthConfig 要么添加到参数对象,然后传递给调用:
imageBuildParameters.AuthConfigs = new Dictionary<string,
AuthConfig>() { { DockerEnvVariables.DockerRegistry, authConfig } };
…</p>
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();
我们目前正在为我为 DockerHub 尝试的任何各种 Docker 注册表获取身份验证错误,因此(我已经编辑了组织/命名空间和图像:{“message”:“pull access denied for registry-1.docker .io//, 存储库不存在或可能需要'docker login': denied: 请求访问资源被拒绝”},“error”:“pull access denied for registry-1.docker.io//, repository does不存在或可能需要“docker login”:拒绝:请求的资源访问被拒绝”</p>
我尝试过的 DockerHub url 列表如下,全部带有上述错误或不同的“无效引用格式”错误:
- 集线器.docker.io
- 集线器.docker.io/v1/
- 码头工人.io
- Docker.io/v1/
- 索引.docker.io
- 索引.docker.io/v1/
- Registry.hub.docker.com
- registry-1.docker.io
奇怪的是,如果我在我的 Windows 系统上本地运行它,粗体 URL 确实有效。但是,它们在部署到集群时都会失败(与 Docker 套接字/npipe 交互的不同方法?)。
有谁知道我需要设置正确的 URL 以正确验证并与 DockerHub 交互?或者,如果我当前对 Docker.Dotnet 库的实现和使用在某些方面不正确?同样,它与 Artifactory 上的私有 Docker 注册表以及在我的本地 Windows 系统上运行的 DockerHub 一起工作得很好。任何帮助将不胜感激。我可以提供更多必要的信息,无论是代码还是配置。
解决方案
推荐阅读
- c# - 如果值错误,如何清除 setter 中的文本框?
- laravel - Laravel 计划任务:“每 2 分钟”的 cron 语法被忽略
- selenium - 如何为 Selenium 服务器和浏览器之间的通信配置端口
- reactjs - 更新用户后无法读取未定义的属性“hasOwnProperty”
- c# - 对托管在许多 Windows 服务中的 WCF 使用性能计数器
- java - 使用 Java 替换字符串中的模式
- macos - 如何正确签署我的应用程序以使用 task_for_pid() 而不会收到错误代码 5?
- android - 我无法使用搜索器在 Google Play 中找到我的 Android 应用程序,但如果您知道 url,它就在平台中
- c++ - 头文件中模板类实现的模板成员
- python - 如何使用具有不同参数的一个函数创建函数列表?