github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/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      fmt.Println("daemon/image.go GetImageID()")
    26  
    27  	if err != nil {
    28  		return "", err
    29  	}
    30  	if id != "" {
    31  		if _, err := daemon.imageStore.Get(image.IDFromDigest(id)); err != nil {
    32  			return "", ErrImageDoesNotExist{refOrID}
    33  		}
    34  		return image.IDFromDigest(id), nil
    35  	}
    36  
    37  	if id, err := daemon.referenceStore.Get(ref); err == nil {
    38  		return image.IDFromDigest(id), nil
    39  	}
    40  
    41  	// deprecated: repo:shortid https://github.com/docker/docker/pull/799
    42  	if tagged, ok := ref.(reference.NamedTagged); ok {
    43  		if tag := tagged.Tag(); stringid.IsShortID(stringid.TruncateID(tag)) {
    44  			if id, err := daemon.imageStore.Search(tag); err == nil {
    45  				for _, namedRef := range daemon.referenceStore.References(id.Digest()) {
    46  					if namedRef.Name() == ref.Name() {
    47  						return id, nil
    48  					}
    49  				}
    50  			}
    51  		}
    52  	}
    53  
    54  	// Search based on ID
    55  	if id, err := daemon.imageStore.Search(refOrID); err == nil {
    56  		return id, nil
    57  	}
    58  
    59  	return "", ErrImageDoesNotExist{refOrID}
    60  }
    61  
    62  // GetImage returns an image corresponding to the image referred to by refOrID.
    63  func (daemon *Daemon) GetImage(refOrID string) (*image.Image, error) {
    64      fmt.Println("daemon/image.go GetImage() refOrID is :", refOrID)
    65  
    66      imgID, err := daemon.GetImageID(refOrID)
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  	return daemon.imageStore.Get(imgID)
    71  }
    72  
    73  // GetImageOnBuild looks up a Docker image referenced by `name`.
    74  func (daemon *Daemon) GetImageOnBuild(name string) (builder.Image, error) {
    75  	img, err := daemon.GetImage(name)
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  	return img, nil
    80  }