मुझे एक docker छवि का sha256 कोड कहां मिल सकता है?


94

मैं CentOS, Tomcat, ... की तरह उनके sha256 कोड का उपयोग करके छवियों को खींचना चाहूंगा

docker pull myimage@sha256:0ecb2ad60

लेकिन मुझे कहीं भी उपयोग करने के लिए sha256-code नहीं मिल रहा है।

मैंने sha256- कोड के किसी भी संकेत के लिए DockerHub रिपॉजिटरी की जाँच की, लेकिन कोई भी नहीं मिला। मैंने उनके टैग द्वारा चित्र डाउनलोड किए

docker pull tomcat:7-jre8

और docker inspectमेटाडेटा में एक sha256 कोड है या नहीं, यह देखने के लिए छवि की जाँच की , लेकिन कोई भी नहीं है (छवि के sha256 कोड को जोड़ने से शायद sha256 कोड बदल जाएगा)।

क्या मुझे स्वयं किसी छवि के sha256 कोड की गणना करनी है और उसका उपयोग करना है?


1
- मैं एक मुद्दा इस से संबंधित dockerhub पर बनाया github.com/docker/docker/issues/17670
माइकल बार्टन

जवाबों:


97

नवीनतम उत्तर

टिप्पणियों में ओहजे द्वारा सुझाए गए संपादन।

docker inspect --format='{{index .RepoDigests 0}}' $IMAGE

मूल उत्तर

मुझे विश्वास है कि आप भी इसका उपयोग कर सकते हैं

docker inspect --format='{{.RepoDigests}}' $IMAGE

केवल डॉकर 1.9 में काम करता है और अगर छवि को मूल रूप से पाचन द्वारा खींचा गया था। विवरण डॉक जारीकर्ता ट्रैकर पर हैं।


8
docker inspect --format='{{index .RepoDigests 0}}' $IMAGEकोई ब्रेसिज़ के लिए उपयोग करें (सरणी का पहला सूचकांक लौटाता है)
ओहिजेज़

@ ओह, धन्यवाद, मैंने आपके सुझाव के साथ अपना जवाब अपडेट कर दिया है।
माइकल बार्टन

कम से कम मेरे लिए, यह उन चित्रों के लिए भी काम करता है जो पाचन द्वारा नहीं , बल्कि टैग द्वारा खींचे जाते हैं। वह डॉकटर 18.09.7 के साथ है।
साल्स्के

विंडोज के तहत, कृपया दोहरे उद्धरण चिह्नों का उपयोग करें
डेविड

इस पोस्ट के माध्यम से जाने के बाद, कोई भी पोस्ट के नीचे देखना चाहता है। stackoverflow.com/questions/56364643/…
vaibhavnd

85

आप इसे प्राप्त कर सकते हैं docker images --digests

REPOSITORY          TAG    DIGEST                                                                    IMAGE ID     CREATED        SIZE
docker/ucp-agent    2.1.0  sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3   583407a61900 3 weeks ago    22.3 MB

1
केवल पचाने के लिए, आप भी उपयोग कर सकते हैं docker images --format '{{.Digest}}'। यह एक foreachबयान में उपयोगी है कि खुदाई के साथ कुछ काम किया जाए।
मार्क लॉमैन

22

सबसे सरल और सबसे संक्षिप्त तरीका है:

docker images --no-trunc --quiet $IMAGE

यह केवल sha256:...स्ट्रिंग लौटाता है और कुछ नहीं।

उदाहरण के लिए:

$ docker images --no-trunc --quiet debian:stretch-slim
sha256:220611111e8c9bbe242e9dc1367c0fa89eef83f26203ee3f7c3764046e02b248

संपादित करें:

नोट: यह केवल उन छवियों के लिए काम करता है जो स्थानीय हैं। आप docker pull $IMAGEपहले कर सकते हैं , यदि आवश्यक हो।


19

बस इसे देखा:

जब मैं किसी चित्र को खींचता हूं, तो आउटपुट के निचले भाग में sha256 कूट कूट जाता है (Digest: sha ....):

docker pull tomcat:7-jre8
7-jre8: Pulling from library/tomcat
902b87aaaec9: Already exists 
9a61b6b1315e: Already exists 
...   
4dcef5c50d60: Already exists 
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for tomcat:7-jre8

यह शा कोड

SHA256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

बाद में छवि को खींचने के लिए इस्तेमाल किया जा सकता है

docker pull tomcat @ sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

इस तरह आप यह सुनिश्चित कर सकते हैं कि छवि को बदला नहीं गया है और उत्पादन के लिए सुरक्षित रूप से उपयोग किया जा सकता है।


10
यह वास्तव में एक पूर्ण समाधान नहीं है, क्योंकि यह केवल ऑनलाइन छवियों का इलाज करता है। यदि आप एक स्थानीय छवि का sha256 चाहते हैं तो क्या होगा?
ज़ेल्फ़िर कलस्टहल

7

मौजूदा उत्तरों के अलावा, आप अपने पास मौजूद सभी छवियों के लिए खुदाई की सूची प्राप्त करने के लिए --digestsविकल्प का उपयोग कर सकते docker imagesहैं।

docker images --digests

आप नीचे ड्रिल करने के लिए एक grep जोड़ सकते हैं

docker images --digests | grep tomcat

5

यह ईद क्षेत्र होना चाहिए था, जिसे आप पुराने डिप्रेस्ड डॉकर हब एपीआई में देख सकते थे

GET /v1/repositories/foo/bar/images HTTP/1.1
  Host: index.docker.io
  Accept: application/json

Parameters:

namespace – the namespace for the repo
repo_name – the name for the repo

उदाहरण प्रतिक्रिया:

HTTP/1.1 200
Vary: Accept
Content-Type: application/json

[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]

लेकिन: यह नहीं है कि यह नए डॉकटर वितरण के साथ कैसे काम कर रहा है । समस्या 628
देखें : "टैग नाम के साथ छवि आईडी प्राप्त करें"

/v1/रजिस्ट्री प्रतिक्रिया /repositories/<repo>/tagsटैग संभाल के साथ छवि आईडी सूची के लिए इस्तेमाल किया।
/v2/केवल हैंडल देने के लिए लगता है।

स्थानीय स्तर पर पाई जाने वाली आईडी की तुलना करने के लिए आईडी प्राप्त करना उपयोगी होगा। केवल वही स्थान जो मुझे मिल सकता है v1Compat, वह मैनिफ़ेस्ट के अनुभाग में है (जो मैं चाहता हूँ कि जानकारी के लिए ओवरकिल है)

वर्तमान (मध्य 2015) उत्तर है:

जिस तरह से बैकएंड पर छवियों को संग्रहीत किया जाता है, उसके लिए वी 1 एपीआई की यह संपत्ति बहुत कम्प्यूटेशनल रूप से महंगी थी। माध्यमिक लुकअप से बचने के लिए केवल टैग नामों की गणना की जाती है।
इसके अलावा, V2 API इमेज आईडी में सौदा नहीं करता है। बल्कि, यह परतों की पहचान करने के लिए डाइजेस्ट का उपयोग करता है, जिसे परत की संपत्ति के रूप में गणना की जा सकती है और स्वतंत्र रूप से सत्यापन योग्य है।


4

मुझे कुछ मामलों में काम न करने के उपरोक्त तरीके मिले। वे या तो:

  • एक ही हैश (.epoDigests सुझाव के मामले में - जब आप एक विशिष्ट रजिस्ट्री पथ का उपयोग करना चाहते हैं) के साथ कई छवियों के साथ अच्छी तरह से व्यवहार न करें
  • छवि को रजिस्ट्रियों में धकेलने पर अच्छी तरह से काम न करें (जहाँ के मामले में यह स्थानीय हैश है, रजिस्ट्री में हैश नहीं है)।

नीचे दी गई विधि नाजुक है, लेकिन एक विशिष्ट धकेलने वाले कंटेनर के लिए विशिष्ट पूर्ण 'नाम' और हैश निकालने के लिए काम करती है।

यहाँ परिदृश्य है - एक छवि एक ही रेपो में 2 अलग-अलग परियोजनाओं के लिए अलग से अपलोड की गई है, इसलिए रिपीडिस्ट्स को क्वेरी करते हुए 2 परिणाम मिलते हैं।

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest

[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]

मैं अल्फा परिणाम का उपयोग करना चाहता हूं, लेकिन मैं अनुमान नहीं लगा सकता कि यह किस सूचकांक में होगा। इसलिए मुझे ब्रैकेट को हटाने और प्रत्येक प्रविष्टि को एक अलग लाइन पर प्राप्त करने के लिए टेक्स्ट आउटपुट में हेरफेर करने की आवश्यकता है। वहां से मैं आसानी से परिणाम प्राप्त कर सकता हूं।

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed 

3

जैसा कि @zelphir द्वारा उल्लेख किया गया है, खुदाई का उपयोग करना एक अच्छा तरीका नहीं है क्योंकि यह स्थानीय-केवल छवि के लिए मौजूद नहीं है। मुझे लगता है कि इमेज आईडी शॉ टैग्स / पुल / पुश आदि में सबसे सटीक और सुसंगत है।

docker inspect --format='{{index .Id}}' $IMAGE

उसने चाल चली।


2

आप इसे संबंधित रिपॉजिटरी से छवि को खींचने के समय पा सकते हैं। नीचे कमांड में डाइजेस्ट का उल्लेख है: do25 छवि खींचने के समय sha256।

09:33 AM##~::>docker --version
Docker version 19.03.4, build 9013bf5

डाइजेस्ट: sha256: 6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d

09:28 AM##~::>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
**Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d**
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

एक बार, छवि डाउनलोड हो जाने के बाद, हम निम्नलिखित कर सकते हैं

"Ubuntu @ SHA256: 6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"

09:36 AM##~::>docker inspect ubuntu | grep -i sha256
        "Id": "sha256:775349758637aff77bf85e2ff0597e86e3e859183ef0baba8b3e8fc8d3cba51c",
            **"ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"**
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
                "sha256:cc967c529ced563b7746b663d98248bc571afdb3c012019d7f54d6c092793b8b",
                "sha256:2c6ac8e5063e35e91ab79dfb7330c6154b82f3a7e4724fb1b4475c0a95dfdd33",
                "sha256:6c01b5a53aac53c66f02ea711295c7586061cbe083b110d54dafbeb6cf7636bf",
                "sha256:e0b3afb09dc386786d49d6443bdfb20bc74d77dcf68e152db7e5bb36b1cca638"

1

बस docker pull tomcat:7-jre8फिर से जारी करें और आपको वही मिलेगा जो आप चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.