2016-09-07 3 views
5

Ähnlich wie bei der Frage "What´s the sha256 code of a docker image?" möchte ich den Digest eines Docker-Images finden. Ich kann den Digest sehen, wenn ich ein Bild herunterladen:Kann ich einen Bildauszug erhalten, ohne das Bild herunterzuladen?

$ docker pull waisbrot/wait:latest                         
latest: Pulling from waisbrot/wait 
Digest: sha256:6f2185daa4ab1711181c30d03f565508e8e978ebd0f263030e7de98deee5f330 
Status: Image is up to date for waisbrot/wait:latest 
$ 

Eine andere Frage, What is the Docker registry v2 API endpoint to get the digest for an image hat eine Antwort darauf hindeutet, die Docker-Content-Digest-Header.

Ich kann sehen, dass es einen Docker-Content-Digest Header, wenn ich das Manifest für das Bild holen:

$ curl 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:waisbrot/wait:pull' -H "Authorization: Basic ${username_password_base64}" 

# store the resulting token in DT 

$ curl -v https://registry-1.docker.io/v2/waisbrot/wait/manifests/latest -H "Authorization: Bearer $DT" -XHEAD 
* Trying 52.7.141.30... 
* Connected to registry-1.docker.io (52.7.141.30) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
* Server certificate: *.docker.io 
* Server certificate: RapidSSL SHA256 CA - G3 
* Server certificate: GeoTrust Global CA 
> GET /v2/waisbrot/wait/manifests/latest HTTP/1.1 
> Host: registry-1.docker.io 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Authorization: Bearer LtVRw-etc-etc-etc 
> 
< HTTP/1.1 200 OK 
< Content-Length: 4974 
< Content-Type: application/vnd.docker.distribution.manifest.v1+prettyjws 
< Docker-Content-Digest: sha256:128c6e3534b842a2eec139999b8ce8aa9a2af9907e2b9269550809d18cd832a3 
< Docker-Distribution-Api-Version: registry/2.0 
< Etag: "sha256:128c6e3534b842a2eec139999b8ce8aa9a2af9907e2b9269550809d18cd832a3" 
< Date: Wed, 07 Sep 2016 16:37:15 GMT 
< Strict-Transport-Security: max-age=31536000 

Allerdings ist dieser Header nicht das gleiche. Der pull Befehl hat mich 6f21 und die Überschrift zeigt 128c. Ferner wird der Pull-Befehl nicht funktioniert, dass verdauen:

$ docker pull waisbrot/[email protected]:128c6e3534b842a2eec139999b8ce8aa9a2af9907e2b9269550809d18cd832a3        
Error response from daemon: manifest unknown: manifest unknown 

während Dinge, wie ich arbeiten will, wenn ich die richtige verdauen haben:

$ docker pull waisbrot/[email protected]:6f2185daa4ab1711181c30d03f565508e8e978ebd0f263030e7de98deee5f330         12:46 [email protected] 
sha256:6f2185daa4ab1711181c30d03f565508e8e978ebd0f263030e7de98deee5f330: Pulling from waisbrot/wait 
Digest: sha256:6f2185daa4ab1711181c30d03f565508e8e978ebd0f263030e7de98deee5f330 
Status: Image is up to date for waisbrot/[email protected]:6f2185daa4ab1711181c30d03f565508e8e978ebd0f263030e7de98deee5f330 

Was ich suche ist eine Möglichkeit, übersetze das latest Tag (das sich ständig ändert) in einen festen Digest, den ich zuverlässig ziehen kann. Aber ich möchte es nicht herunterziehen, um diese Übersetzung zu machen.

+0

Whoah, ich habe keine Lösung so leicht erwartet! Ja, das scheint die Antwort zu sein: Wenn ich diesen Header hinzufüge, ist der Digest-Header, den ich zurückbekomme, der, nach dem ich suche. –

Antwort

7

Versuchen

$ curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:waisbrot/wait:pull' -H "Authorization: Basic ${username_password_base64}" 

Hintergrund: This forum link das gleiche Problem diskutiert.

Das Problem ist, dass der Standardinhaltstyp, der vom Server ausgewählt wird, application/vnd.docker.distribution.manifest.v1+prettyjws (ein Manifest v1) ist, und Sie müssen v2 manifestieren. Daher müssen Sie den Header Accept auf application/vnd.docker.distribution.manifest.v2+json setzen.

0

Ich weiß, dass dieses Problem beantwortet wird, aber entweder fehlt mir etwas oder die aktuelle Version des Registrierungsdiensts AWS ECR funktioniert nicht wie erwartet.

Wenn Sie versuchen, den Digest von AWS ECR mit HEAD abzurufen und auch den Inhaltstyp zu wechseln, wird kein Digest-Wert zurückgegeben, den ich verwenden kann, um ein Image mithilfe der Registrierung Api zu ziehen.

Um dies erhalten Sie das Manifest für den Tag, das Sie sich interessieren, und berechnen Sie die sha256 der Antwort Json wie es ist, einschließlich der Formatierung, ohne die Unterschrift Abschnitt

0

Im Anschluss an ByteFlinger die bekommen verdauen Vorschlag, der kein Beispiel hatte, versuchte ich dies, und das ist, wie es zu berechnen:

$ docker-ls tag -registry https://myregistry.net:5000 
spicysomtam/zookeeper:latest 
requesting manifest . done 
repository: spicysomtam/zookeeper 
tagName: latest 
digest: sha256:bd5dd80253171e4dffccbea7c639c90a63d5424aa2d7fe655aea766405c83036 

$ curl -ns -H "Accept: 
application/vnd.docker.distribution.manifest.v2+json" -X GET 
https://myregistry.net:5000/v2/spicysomtam/zookeeper/manifests/latest|sha256sum 
bd5dd80253171e4dffccbea7c639c90a63d5424aa2d7fe655aea766405c83036 - 

$ docker images --digests |grep zookeeper 
myregistry.net:5000/spicysomtam/zookeeper   latest          sha256:bd5dd80253171e4dffccbea7c639c90a63d5424aa2d7fe655aea766405c83036 a983e71ca22d  29 hours ago  584MB 
+0

Ich würde das viel klarer über die Schritte machen, die unternommen werden, um zu beheben, anstatt ein Protokoll zu zeigen –

Verwandte Themen