image.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package daemon
  2. import (
  3. "fmt"
  4. "github.com/docker/docker/builder"
  5. "github.com/docker/docker/image"
  6. "github.com/docker/docker/pkg/stringid"
  7. "github.com/docker/docker/reference"
  8. )
  9. // ErrImageDoesNotExist is error returned when no image can be found for a reference.
  10. type ErrImageDoesNotExist struct {
  11. RefOrID string
  12. }
  13. func (e ErrImageDoesNotExist) Error() string {
  14. return fmt.Sprintf("no such id: %s", e.RefOrID)
  15. }
  16. // GetImageID returns an image ID corresponding to the image referred to by
  17. // refOrID.
  18. func (daemon *Daemon) GetImageID(refOrID string) (image.ID, error) {
  19. id, ref, err := reference.ParseIDOrReference(refOrID)
  20. if err != nil {
  21. return "", err
  22. }
  23. if id != "" {
  24. if _, err := daemon.imageStore.Get(image.IDFromDigest(id)); err != nil {
  25. return "", ErrImageDoesNotExist{refOrID}
  26. }
  27. return image.IDFromDigest(id), nil
  28. }
  29. if id, err := daemon.referenceStore.Get(ref); err == nil {
  30. return image.IDFromDigest(id), nil
  31. }
  32. // deprecated: repo:shortid https://github.com/docker/docker/pull/799
  33. if tagged, ok := ref.(reference.NamedTagged); ok {
  34. if tag := tagged.Tag(); stringid.IsShortID(stringid.TruncateID(tag)) {
  35. if id, err := daemon.imageStore.Search(tag); err == nil {
  36. for _, namedRef := range daemon.referenceStore.References(id.Digest()) {
  37. if namedRef.Name() == ref.Name() {
  38. return id, nil
  39. }
  40. }
  41. }
  42. }
  43. }
  44. // Search based on ID
  45. if id, err := daemon.imageStore.Search(refOrID); err == nil {
  46. return id, nil
  47. }
  48. return "", ErrImageDoesNotExist{refOrID}
  49. }
  50. // GetImage returns an image corresponding to the image referred to by refOrID.
  51. func (daemon *Daemon) GetImage(refOrID string) (*image.Image, error) {
  52. imgID, err := daemon.GetImageID(refOrID)
  53. if err != nil {
  54. return nil, err
  55. }
  56. return daemon.imageStore.Get(imgID)
  57. }
  58. // GetImageOnBuild looks up a Docker image referenced by `name`.
  59. func (daemon *Daemon) GetImageOnBuild(name string) (builder.Image, error) {
  60. img, err := daemon.GetImage(name)
  61. if err != nil {
  62. return nil, err
  63. }
  64. return img, nil
  65. }