service.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package graph
  2. import (
  3. "fmt"
  4. "io"
  5. "github.com/Sirupsen/logrus"
  6. "github.com/docker/docker/api/types"
  7. )
  8. func (s *TagStore) LookupRaw(name string) ([]byte, error) {
  9. image, err := s.LookupImage(name)
  10. if err != nil || image == nil {
  11. return nil, fmt.Errorf("No such image %s", name)
  12. }
  13. imageInspectRaw, err := image.RawJson()
  14. if err != nil {
  15. return nil, err
  16. }
  17. return imageInspectRaw, nil
  18. }
  19. // Lookup return an image encoded in JSON
  20. func (s *TagStore) Lookup(name string) (*types.ImageInspect, error) {
  21. image, err := s.LookupImage(name)
  22. if err != nil || image == nil {
  23. return nil, fmt.Errorf("No such image: %s", name)
  24. }
  25. imageInspect := &types.ImageInspect{
  26. Id: image.ID,
  27. Parent: image.Parent,
  28. Comment: image.Comment,
  29. Created: image.Created,
  30. Container: image.Container,
  31. ContainerConfig: &image.ContainerConfig,
  32. DockerVersion: image.DockerVersion,
  33. Author: image.Author,
  34. Config: image.Config,
  35. Architecture: image.Architecture,
  36. Os: image.OS,
  37. Size: image.Size,
  38. VirtualSize: image.GetParentsSize(0) + image.Size,
  39. }
  40. return imageInspect, nil
  41. }
  42. // ImageTarLayer return the tarLayer of the image
  43. func (s *TagStore) ImageTarLayer(name string, dest io.Writer) error {
  44. if image, err := s.LookupImage(name); err == nil && image != nil {
  45. fs, err := image.TarLayer()
  46. if err != nil {
  47. return err
  48. }
  49. defer fs.Close()
  50. written, err := io.Copy(dest, fs)
  51. if err != nil {
  52. return err
  53. }
  54. logrus.Debugf("rendered layer for %s of [%d] size", image.ID, written)
  55. return nil
  56. }
  57. return fmt.Errorf("No such image: %s", name)
  58. }