10

我正在尝试使用 docker 远程 API从托管在 Docker 中心https://registry.hub.docker.com/u/myname/myapp中的私有存储库中提取 docker 映像。文档不清楚如何在这样的 POST 请求中指定身份验证凭据

curl -XPOST -H "X-Registy-Auth: base64_encoded_authconfig_object" "http://localhost:4243/images/create?fromImage=myname/myapp"

也没有详细说明 authconfig 是如何生成的。

讨论了发送具有如下结构的 base 64 编码 json:

{
  "index_url": {
    "username": "string",
    "password": "string",
    "email": "string",
    "serveraddress": "string"
  }
}

但没有解释什么是 index_url 和 serveraddress。他们是

index_url = https://registry.hub.docker.com/u/myname/myapp
serveraddress = https://registry.hub.docker.com

上面的配置给了我 404,可能注册表中心私有 repo 没有被识别。

我还尝试使用 base 64 对 ~/.dockercfg 的内容进行编码

{
  "https://index.docker.io/v1/": {
    "auth":"xxxxxxxxxxxxxxxxxxx==",
    "email":"myname@myemail.com"
  }
}

您能告诉我如何生成 base64 编码的 authconfig 对象并使上述 curl 命令正常工作吗?

提前致谢

码头工人版本

Client version: 0.11.1
Client API version: 1.11
Go version (client): go1.2.1
Git commit (client): fb99f99
Server version: 0.11.1
Server API version: 1.11
Git commit (server): fb99f99
Go version (server): go1.2.1
4

2 回答 2

12

我遇到过同样的问题。

这是您应该用来传递凭据的“原始” AuthConfig对象:

{
  "用户名":"your_registry_username_or_email",
  “密码”:”*****”,
  "auth":"", // 留空
  “电子邮件”:“您的@email.tld”
}

然后,您必须使用Base64对其进行“编码” 。

您没有说明您使用的是什么语言,但如果需要,这个很棒的网站可以让您一键编码您的对象。或者,从外壳:

echo '{"username":"username","password":"*****", "auth":"","email":"your@email.tld"}' | base64


然后,只需将编码值传递给标头:

X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ==

curl这是一个使用和的工作示例

  • r.getitlive.io 上提供的注册表
  • 在 '192.168.60.10:8888' 监听的 docker 守护进程:
卷曲 -X POST -d "" \
  -H "X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ=="\
  'http://192.168.60.11:8888/images/create?fromImage=r.getitlive.io/cool/repo&tag=latest'

注意:我无法通过将远程注册表端点/URL 放在serveraddressAuthConfig 对象的字段中来使其工作(还)。这就是我将注册表主机添加到fromImage=参数的原因。

于 2014-07-18T11:40:40.180 回答
3

这个合并的 docker pull request看来,X-Registry-Auth标头应该是格式为 base-64 编码的 json 字符串

{
  'username': string,
  'password': string,
  'email': string,
  'serverddress' : string
}

另一个参考链接

于 2015-01-06T17:57:15.763 回答