// GetImage returns a pointer to an Image structure describing the image // referred to by refOrID inside repository repoName. func (store *TagStore) GetImage(repoName, refOrID string) (*image.Image, error) { repo, err := store.Get(repoName) if err != nil { return nil, err } if repo == nil { return nil, nil } store.Lock() defer store.Unlock() if imgID, exists := repo[refOrID]; exists { return store.graph.Get(imgID) } // If no matching tag is found, search through images for a matching image id // iff it looks like a short ID or would look like a short ID if stringid.IsShortID(stringid.TruncateID(refOrID)) { for _, revision := range repo { if strings.HasPrefix(revision, refOrID) { return store.graph.Get(revision) } } } return nil, nil }
// GetImageID returns an image ID corresponding to the image referred to by // refOrID. func (daemon *Daemon) GetImageID(refOrID string) (image.ID, error) { id, ref, err := reference.ParseIDOrReference(refOrID) if err != nil { return "", err } if id != "" { if _, err := daemon.imageStore.Get(image.IDFromDigest(id)); err != nil { return "", ErrImageDoesNotExist{refOrID} } return image.IDFromDigest(id), nil } if id, err := daemon.referenceStore.Get(ref); err == nil { return image.IDFromDigest(id), nil } // deprecated: repo:shortid https://github.com/docker/docker/pull/799 if tagged, ok := ref.(reference.NamedTagged); ok { if tag := tagged.Tag(); stringid.IsShortID(stringid.TruncateID(tag)) { if id, err := daemon.imageStore.Search(tag); err == nil { for _, namedRef := range daemon.referenceStore.References(id.Digest()) { if namedRef.Name() == ref.Name() { return id, nil } } } } } // Search based on ID if id, err := daemon.imageStore.Search(refOrID); err == nil { return id, nil } return "", ErrImageDoesNotExist{refOrID} }