Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to push in a private registry. #55

Closed
Soulou opened this issue Nov 9, 2013 · 7 comments
Closed

Allow to push in a private registry. #55

Soulou opened this issue Nov 9, 2013 · 7 comments

Comments

@Soulou
Copy link
Contributor

Soulou commented Nov 9, 2013

Currently, the Docker::Image#push method only allow to push on Docker public Index. It may be interesting to be able to push on any registry.

@tlunter
Copy link
Contributor

tlunter commented Nov 9, 2013

Hi @Soulou,

Can you show me how you were trying? I am looking at the docker-cli source code and it looks like all they do is decode the registry url part of image name (repository) and set that as the ServerAddress of the AuthConfig object.

https://github.com/dotcloud/docker/blob/master/registry/registry.go#L81

If you set the Docker.creds to:

{
  'username' => '',
  'password' => '',
  'email' => '',
  'serveraddress' => ''
}

where the data matches up with the private registry, it should work. I will load up a local docker-registry and try it out though.

@Soulou
Copy link
Contributor Author

Soulou commented Nov 9, 2013

Thank for your answer. A private repo may not have any authentication, this is why I didn't really know how to handle that.

I've onlly tried myimage.push (because I was thinking that the part which identify the registry `registry.example.org/myimage) was managed by the docker daemon.

But I've just seen that we can do docker push registry.example.com/myimage -r otherregistry.example2.com So this part has changed.

@Soulou
Copy link
Contributor Author

Soulou commented Nov 9, 2013

Config['registry] = "http://myregistry.example.org"
Docker.authenticate! username: "", password: "", email: "", serveraddress: Config['registry']

Exception:

`rescue in authenticate!': Docker::Error::AuthenticationError (Docker::Error::AuthenticationError)
remote:     from /home/dev/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/docker-api-1.7.0/lib/docker.rb:60:in `authenticate!'

Server logs:

2013/11/09 19:29:15 POST /v1.6/auth
[error] api.go:1025 Error: Server Error: Post http://myregistry.example.orgusers/: dial tcp: lookup myregistry.example.orgusers on [10.0.2.3]:53: server misbehaving
[error] api.go:79 HTTP Error: statusCode=500 Server Error: Post http://myregistry.example.orgusers/: dial tcp: lookup myregistry.example.orgusers on [10.0.2.3]:53: server misbehaving

The suffix "users" is added, I'm going to have a look to docker code.

@Soulou
Copy link
Contributor Author

Soulou commented Nov 9, 2013

Ok, the '/' looks mandatory in my

Config['registry] = "http://myregistry.example.org" → Config['registry] = "http://myregistry.example.org/"

In this case, the docker daemon contact the registry and ask for the user

Docker daemon output:

[error] api.go:1025 Error: Unexpected status code [404] : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>

[error] api.go:79 HTTP Error: statusCode=500 Unexpected status code [404] : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>

Registry output:

172.17.42.1 - - [09/Nov/2013:19:37:48] "POST /users/ HTTP/1.1" 404 233 "-" "Go 1.1 package http"
2013-11-09 19:37:48,442 INFO: 172.17.42.1 - - [09/Nov/2013:19:37:48] "POST /users/ HTTP/1.1" 404 233 "-" "Go 1.1 package http"

@Soulou
Copy link
Contributor Author

Soulou commented Nov 9, 2013

When I'm directly using docker push their is no /auth request (so no request /users/ on the registry) and it works well.

@tlunter
Copy link
Contributor

tlunter commented Nov 9, 2013

Why not just set Docker.creds instead of trying to use Docker.authenticate! ?

Try:

Docker.config = { username: "", password: "", email: "", serveraddress: Config['registry'] }

and then with your image do image.push.

@Soulou
Copy link
Contributor Author

Soulou commented Nov 9, 2013

Thank you, it works well =)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants