github.com/chenchun/docker@v1.3.2-0.20150629222414-20467faf132b/graph/service.go (about) 1 package graph 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/Sirupsen/logrus" 8 "github.com/docker/docker/api/types" 9 ) 10 11 func (s *TagStore) LookupRaw(name string) ([]byte, error) { 12 image, err := s.LookupImage(name) 13 if err != nil || image == nil { 14 return nil, fmt.Errorf("No such image %s", name) 15 } 16 17 imageInspectRaw, err := s.graph.RawJSON(image.ID) 18 if err != nil { 19 return nil, err 20 } 21 22 return imageInspectRaw, nil 23 } 24 25 // Lookup return an image encoded in JSON 26 func (s *TagStore) Lookup(name string) (*types.ImageInspect, error) { 27 image, err := s.LookupImage(name) 28 if err != nil || image == nil { 29 return nil, fmt.Errorf("No such image: %s", name) 30 } 31 32 imageInspect := &types.ImageInspect{ 33 Id: image.ID, 34 Parent: image.Parent, 35 Comment: image.Comment, 36 Created: image.Created, 37 Container: image.Container, 38 ContainerConfig: &image.ContainerConfig, 39 DockerVersion: image.DockerVersion, 40 Author: image.Author, 41 Config: image.Config, 42 Architecture: image.Architecture, 43 Os: image.OS, 44 Size: image.Size, 45 VirtualSize: s.graph.GetParentsSize(image, 0) + image.Size, 46 } 47 48 imageInspect.GraphDriver.Name = s.graph.driver.String() 49 50 graphDriverData, err := s.graph.driver.GetMetadata(image.ID) 51 if err != nil { 52 return nil, err 53 } 54 imageInspect.GraphDriver.Data = graphDriverData 55 return imageInspect, nil 56 } 57 58 // ImageTarLayer return the tarLayer of the image 59 func (s *TagStore) ImageTarLayer(name string, dest io.Writer) error { 60 if image, err := s.LookupImage(name); err == nil && image != nil { 61 fs, err := s.graph.TarLayer(image) 62 if err != nil { 63 return err 64 } 65 defer fs.Close() 66 67 written, err := io.Copy(dest, fs) 68 if err != nil { 69 return err 70 } 71 logrus.Debugf("rendered layer for %s of [%d] size", image.ID, written) 72 return nil 73 } 74 return fmt.Errorf("No such image: %s", name) 75 }