2014-07-17 10 views
8

Próbuję pobrać obrazy doków z prywatnego repozytorium hostowanego w Docker Hub https://registry.hub.docker.com/u/myname/myapp w ten sposób, używając zdalnego interfejsu API docker. doc nie jest jasne, w jaki sposób określić poświadczenia uwierzytelniania w żądaniu POST jak tenDocker zdalnego pobierania api z prywatnego rejestru Docker Hub

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

This też nie rozwinąć, jak dokładnie AuthConfig jest generowany.

This mówi o wysyłanie w bazie 64 zakodowanej json o strukturze tak:

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

Ale robi wyjaśnić, co index_url i serveraddress. Powyższe konfiguracje dają mi 404, prawdopodobnie repozytorium prywatne repo nie jest rozpoznawane.

Próbowałem też podstawa 64 kodowania zawartości mojego ~/.dockercfg

{ 
    "https://index.docker.io/v1/": { 
    "auth":"xxxxxxxxxxxxxxxxxxx==", 
    "email":"[email protected]" 
    } 
} 

mógłbyś mi powiedzieć jak wygenerować zakodowane base64 obiektu AuthConfig i dostać powyższego polecenia curl roboczą.

góry dzięki

Docker wersja

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

Hi @alpha_cod, czy ciągnąć obrazy z prywatnej rejestru powodzeniem przy użyciu zdalnego docker API? – lephix

Odpowiedz

9

miałem ten sam problem.

Oto "raw" AuthConfig obiekt, który należy użyć, aby przejść poświadczenia:

 
{ 
    "username":"your_registry_username_or_email", 
    "password":"*****", 
    "auth":"", // leave empty 
    "email":"[email protected]" 
} 

Następnie trzeba "zakodować" go przy użyciu Base64.

Nie wiesz, jakiego języka używasz, ale w razie potrzeby this awesome site pozwoli ci zakodować obiekt jednym kliknięciem. Lub z muszli:

echo '{"username":"username","password":"*****", "auth":"","email":"[email protected]"}' | base64 


Potem tylko przekazać zakodowaną wartość nagłówka:

X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ== 

Oto przykład pracy użyciu curl i

  • się rejestr dostępny pod adresem r.getitlive.io
  • demon stacji dokującej nasłuchujący na '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' 

Uwaga: nie mogłem zrobić to działa (jeszcze) przez umieszczenie rejestru zdalnego punktu końcowego/URL w polu obiektu AuthConfig serveraddress. Właśnie dlatego dodaję hosta rejestru do parametru fromImage=.

+0

Dziękuję za pomoc. Próbowałem powyższego polecenia zwijania. Mówi nieprawidłowa wartośćImage (Niepoprawna nazwa przestrzeni nazw (u), dozwolone są tylko [a-z0-9_, wielkość między 4 a 30), gdy użyłem https://registry.hub.docker.com/u/moja_name/myapp lub registry.hub.docker.com/myname/myapp. Wygląda na to, że obraz nie akceptuje żadnego adresu URL, ale jest to coś w postaci myname/myapp, w którym to przypadku jest napisane 404 ponieważ to repozytorium nie jest publiczne –

+0

Mmm ... Spróbuj całkowicie usunąć 'registry.hub.docker.com', ponieważ jest to domyślna. Zamiast tego użyj '? FromImage = myname/myapp'. – mbarthelemy

+0

To daje 404, ponieważ niejawna wzmianka o rejestrze Dockerhub nie jest rozpoznawana –

Powiązane problemy