github.com/noxiouz/docker@v0.7.3-0.20160629055221-3d231c78e8c5/daemon/image_inspect.go (about) 1 package daemon 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/docker/docker/layer" 8 "github.com/docker/docker/reference" 9 "github.com/docker/engine-api/types" 10 ) 11 12 // LookupImage looks up an image by name and returns it as an ImageInspect 13 // structure. 14 func (daemon *Daemon) LookupImage(name string) (*types.ImageInspect, error) { 15 img, err := daemon.GetImage(name) 16 if err != nil { 17 return nil, fmt.Errorf("No such image: %s", name) 18 } 19 20 refs := daemon.referenceStore.References(img.ID()) 21 repoTags := []string{} 22 repoDigests := []string{} 23 for _, ref := range refs { 24 switch ref.(type) { 25 case reference.NamedTagged: 26 repoTags = append(repoTags, ref.String()) 27 case reference.Canonical: 28 repoDigests = append(repoDigests, ref.String()) 29 } 30 } 31 32 var size int64 33 var layerMetadata map[string]string 34 layerID := img.RootFS.ChainID() 35 if layerID != "" { 36 l, err := daemon.layerStore.Get(layerID) 37 if err != nil { 38 return nil, err 39 } 40 defer layer.ReleaseAndLog(daemon.layerStore, l) 41 size, err = l.Size() 42 if err != nil { 43 return nil, err 44 } 45 46 layerMetadata, err = l.Metadata() 47 if err != nil { 48 return nil, err 49 } 50 } 51 52 comment := img.Comment 53 if len(comment) == 0 && len(img.History) > 0 { 54 comment = img.History[len(img.History)-1].Comment 55 } 56 57 imageInspect := &types.ImageInspect{ 58 ID: img.ID().String(), 59 RepoTags: repoTags, 60 RepoDigests: repoDigests, 61 Parent: img.Parent.String(), 62 Comment: comment, 63 Created: img.Created.Format(time.RFC3339Nano), 64 Container: img.Container, 65 ContainerConfig: &img.ContainerConfig, 66 DockerVersion: img.DockerVersion, 67 Author: img.Author, 68 Config: img.Config, 69 Architecture: img.Architecture, 70 Os: img.OS, 71 Size: size, 72 VirtualSize: size, // TODO: field unused, deprecate 73 RootFS: rootFSToAPIType(img.RootFS), 74 } 75 76 imageInspect.GraphDriver.Name = daemon.GraphDriverName() 77 78 imageInspect.GraphDriver.Data = layerMetadata 79 80 return imageInspect, nil 81 }