我正在尝试使用docker远程API从Docker hub https://registry.hub.docker.com/u/myname/myapp中托管的私有存储库中提取docker镜像。 doc不明确如何在POST请求中指定身份验证凭据,如此
curl -XPOST -H "X-Registy-Auth: base64_encoded_authconfig_object" "http://localhost:4243/images/create?fromImage=myname/myapp"
This也没有详细说明如何生成authconfig。
This讨论了使用如下结构发送基本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,可能是注册中心私有仓库无法被识别。
我也尝试过base 64编码我的〜/ .dockercfg
的内容{
"https://index.docker.io/v1/": {
"auth":"xxxxxxxxxxxxxxxxxxx==",
"email":"myname@myemail.com"
}
}
你能告诉我如何生成base64编码的authconfig对象并使上面的curl命令工作。
提前致谢
Docker版本
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
答案 0 :(得分:9)
我遇到了同样的问题。
这里是" raw"您应该用来传递凭据的 AuthConfig 对象:
{ "username":"your_registry_username_or_email", "password":"*****", "auth":"", // leave empty "email":"your@email.tld" }
然后你必须"编码"它使用 Base64 。
您没有说出您正在使用的语言,但如果需要,this awesome site会让您只需点击一下即可对对象进行编码。或者,从shell:
echo '{"username":"username","password":"*****", "auth":"","email":"your@email.tld"}' | base64
然后,只需将编码值传递给标题:
X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ==
以下是使用curl
和
curl -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放在AuthConfig对象的serveraddress
字段中,我无法使其工作。这就是我将注册表主机添加到fromImage=
参数的原因。
答案 1 :(得分:1)
从this merged docker pull request开始,X-Registry-Auth
标题似乎应该是格式为base-64编码的json字符串
{
'username': string,
'password': string,
'email': string,
'serverddress' : string
}