问题
I'm trying to pull docker images from a private repository hosted in Docker hub https://registry.hub.docker.com/u/myname/myapp like this using the docker remote API. The doc is not clear as to how to specify the authentication credentials in a POST request like this
curl -XPOST -H "X-Registy-Auth: base64_encoded_authconfig_object" "http://localhost:4243/images/create?fromImage=myname/myapp"
This also does not elaborate on how exactly the authconfig is generated.
This talks about sending in a base 64 encoded json with a structure like this:
{
"index_url": {
"username": "string",
"password": "string",
"email": "string",
"serveraddress": "string"
}
}
But doesnt explain what is index_url and serveraddress. Are they
index_url = https://registry.hub.docker.com/u/myname/myapp
serveraddress = https://registry.hub.docker.com
The above configurations give me 404, probably the registry hub private repo is not being recognized.
I also tried base 64 encoding the contents of my ~/.dockercfg
{
"https://index.docker.io/v1/": {
"auth":"xxxxxxxxxxxxxxxxxxx==",
"email":"myname@myemail.com"
}
}
Could you tell me how to generate the base64 encoded authconfig object and get the above curl command working.
Thanks in advance
Docker version
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
回答1:
I had the same issue.
Here's the "raw" AuthConfig object that you should use to pass the credentials:
{ "username":"your_registry_username_or_email", "password":"*****", "auth":"", // leave empty "email":"your@email.tld" }
You then have to "encode" it using Base64.
You didn't tell what language you're using, but if needed, this awesome site will let you encode your object in one click. Or, from a shell:
echo '{"username":"username","password":"*****", "auth":"","email":"your@email.tld"}' | base64
Then, just pass the encoded value to the header:
X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ==
Here's a working example using curl
and
- a registry available at r.getitlive.io
- a docker daemon listening at '192.168.60.10:8888' :
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'
Note : I couldn't make it work (yet) by putting the remote registry endpoint/URL in the serveraddress
field of the AuthConfig object. That's why I'm adding the registry host to the fromImage=
parameter.
回答2:
From this merged docker pull request, it seems that X-Registry-Auth
header should be a base-64 encoded json string of the form
{
'username': string,
'password': string,
'email': string,
'serverddress' : string
}
another reference link
来源:https://stackoverflow.com/questions/24814714/docker-remote-api-pull-from-docker-hub-private-registry