Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker remote api pull from Docker hub private registry

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":"[email protected]"
  }
}

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
like image 826
alpha_cod Avatar asked Jul 17 '14 22:07

alpha_cod


People also ask

How do I pull an image from Docker Hub private repository?

In order to pull images from your private repository, you'll need to login to Docker. If no registry URI is specified, Docker will assume you intend to use or log out from Docker Hub. Triton comes with several images built-in. You can view the available list with triton images .

Is Docker Hub private repository?

You get one private repository for free with your Docker Hub user account (not usable for organizations you're a member of). If you need more private repositories for your user account, upgrade your Docker Hub plan from your Billing Information page.

Is Docker Hub a docker registry?

Docker Hub is Docker's official cloud-based registry for Docker images. As you might expect, since Docker Hub is Docker's official registry, it is the default registry when you install Docker.


Video Answer


1 Answers

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":"[email protected]"
}

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":"[email protected]"}' | 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.

like image 55
mbarthelemy Avatar answered Sep 30 '22 17:09

mbarthelemy