service.go 2.0 KB

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