github.com/skf/moby@v1.13.1/daemon/image.go (about)

     1  package daemon
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/docker/docker/builder"
     7  	"github.com/docker/docker/image"
     8  	"github.com/docker/docker/pkg/stringid"
     9  	"github.com/docker/docker/reference"
    10  )
    11  
    12  // ErrImageDoesNotExist is error returned when no image can be found for a reference.
    13  type ErrImageDoesNotExist struct {
    14  	RefOrID string
    15  }
    16  
    17  func (e ErrImageDoesNotExist) Error() string {
    18  	return fmt.Sprintf("no such id: %s", e.RefOrID)
    19  }
    20  
    21  // GetImageID returns an image ID corresponding to the image referred to by
    22  // refOrID.
    23  func (daemon *Daemon) GetImageID(refOrID string) (image.ID, error) {
    24  	id, ref, err := reference.ParseIDOrReference(refOrID)
    25  	if err != nil {
    26  		return "", err
    27  	}
    28  	if id != "" {
    29  		if _, err := daemon.imageStore.Get(image.IDFromDigest(id)); err != nil {
    30  			return "", ErrImageDoesNotExist{refOrID}
    31  		}
    32  		return image.IDFromDigest(id), nil
    33  	}
    34  
    35  	if id, err := daemon.referenceStore.Get(ref); err == nil {
    36  		return image.IDFromDigest(id), nil
    37  	}
    38  
    39  	// deprecated: repo:shortid https://github.com/docker/docker/pull/799
    40  	if tagged, ok := ref.(reference.NamedTagged); ok {
    41  		if tag := tagged.Tag(); stringid.IsShortID(stringid.TruncateID(tag)) {
    42  			if id, err := daemon.imageStore.Search(tag); err == nil {
    43  				for _, namedRef := range daemon.referenceStore.References(id.Digest()) {
    44  					if namedRef.Name() == ref.Name() {
    45  						return id, nil
    46  					}
    47  				}
    48  			}
    49  		}
    50  	}
    51  
    52  	// Search based on ID
    53  	if id, err := daemon.imageStore.Search(refOrID); err == nil {
    54  		return id, nil
    55  	}
    56  
    57  	return "", ErrImageDoesNotExist{refOrID}
    58  }
    59  
    60  // GetImage returns an image corresponding to the image referred to by refOrID.
    61  func (daemon *Daemon) GetImage(refOrID string) (*image.Image, error) {
    62  	imgID, err := daemon.GetImageID(refOrID)
    63  	if err != nil {
    64  		return nil, err
    65  	}
    66  	return daemon.imageStore.Get(imgID)
    67  }
    68  
    69  // GetImageOnBuild looks up a Docker image referenced by `name`.
    70  func (daemon *Daemon) GetImageOnBuild(name string) (builder.Image, error) {
    71  	img, err := daemon.GetImage(name)
    72  	if err != nil {
    73  		return nil, err
    74  	}
    75  	return img, nil
    76  }