MCPcopy Create free account
hub / github.com/containers/image / GetDigest

Function GetDigest

docker/docker_image.go:141–186  ·  view source on GitHub ↗

GetDigest returns the image's digest Use this to optimize and avoid use of an ImageSource based on the returned digest; if you are going to use an ImageSource anyway, it’s more efficient to create it first and compute the digest from the value returned by GetManifest. NOTE: Implemented to avoid Dock

(ctx context.Context, sys *types.SystemContext, ref types.ImageReference)

Source from the content-addressed store, hash-verified

139// NOTE: Implemented to avoid Docker Hub API limits, and mirror configuration may be
140// ignored (but may be implemented in the future)
141func GetDigest(ctx context.Context, sys *types.SystemContext, ref types.ImageReference) (digest.Digest, error) {
142 dr, ok := ref.(dockerReference)
143 if !ok {
144 return "", errors.New("ref must be a dockerReference")
145 }
146 if dr.isUnknownDigest {
147 return "", fmt.Errorf("docker: reference %q is for unknown digest case; cannot get digest", dr.StringWithinTransport())
148 }
149
150 tagOrDigest, err := dr.tagOrDigest()
151 if err != nil {
152 return "", err
153 }
154
155 registryConfig, err := loadRegistryConfiguration(sys)
156 if err != nil {
157 return "", err
158 }
159 client, err := newDockerClientFromRef(sys, dr, registryConfig, false, "pull")
160 if err != nil {
161 return "", fmt.Errorf("failed to create client: %w", err)
162 }
163 defer client.Close()
164
165 path := fmt.Sprintf(manifestPath, reference.Path(dr.ref), tagOrDigest)
166 headers := map[string][]string{
167 "Accept": manifest.DefaultRequestedManifestMIMETypes,
168 }
169
170 res, err := client.makeRequest(ctx, http.MethodHead, path, headers, nil, v2Auth, nil)
171 if err != nil {
172 return "", err
173 }
174
175 defer res.Body.Close()
176 if res.StatusCode != http.StatusOK {
177 return "", fmt.Errorf("reading digest %s in %s: %w", tagOrDigest, dr.ref.Name(), registryHTTPResponseToError(res))
178 }
179
180 dig, err := digest.Parse(res.Header.Get("Docker-Content-Digest"))
181 if err != nil {
182 return "", err
183 }
184
185 return dig, nil
186}

Callers

nothing calls this directly

Calls 10

PathFunction · 0.92
newDockerClientFromRefFunction · 0.85
tagOrDigestMethod · 0.80
GetMethod · 0.80
StringWithinTransportMethod · 0.65
CloseMethod · 0.65
NameMethod · 0.65
makeRequestMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…