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 }