Browse code

api/types/image: move GetImageOpts to api/types/backend

The `GetImageOpts` struct is used for options to be passed to the backend,
and are not used in client code. This struct currently is intended for internal
use only.

This patch moves the `GetImageOpts` struct to the backend package to prevent
it being imported in the client, and to make it more clear that this is part
of internal APIs, and not public-facing.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2024/01/21 00:01:43
Showing 23 changed files
... ...
@@ -6,6 +6,7 @@ import (
6 6
 
7 7
 	"github.com/distribution/reference"
8 8
 	"github.com/docker/docker/api/types"
9
+	"github.com/docker/docker/api/types/backend"
9 10
 	"github.com/docker/docker/api/types/filters"
10 11
 	"github.com/docker/docker/api/types/image"
11 12
 	"github.com/docker/docker/api/types/registry"
... ...
@@ -25,7 +26,7 @@ type imageBackend interface {
25 25
 	ImageDelete(ctx context.Context, imageRef string, force, prune bool) ([]image.DeleteResponse, error)
26 26
 	ImageHistory(ctx context.Context, imageName string) ([]*image.HistoryResponseItem, error)
27 27
 	Images(ctx context.Context, opts types.ImageListOptions) ([]*image.Summary, error)
28
-	GetImage(ctx context.Context, refOrID string, options image.GetImageOpts) (*dockerimage.Image, error)
28
+	GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*dockerimage.Image, error)
29 29
 	TagImage(ctx context.Context, id dockerimage.ID, newRef reference.Named) error
30 30
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
31 31
 }
... ...
@@ -15,8 +15,9 @@ import (
15 15
 	"github.com/docker/docker/api"
16 16
 	"github.com/docker/docker/api/server/httputils"
17 17
 	"github.com/docker/docker/api/types"
18
+	"github.com/docker/docker/api/types/backend"
18 19
 	"github.com/docker/docker/api/types/filters"
19
-	opts "github.com/docker/docker/api/types/image"
20
+	imagetypes "github.com/docker/docker/api/types/image"
20 21
 	"github.com/docker/docker/api/types/registry"
21 22
 	"github.com/docker/docker/api/types/versions"
22 23
 	"github.com/docker/docker/builder/remotecontext"
... ...
@@ -285,7 +286,7 @@ func (ir *imageRouter) deleteImages(ctx context.Context, w http.ResponseWriter,
285 285
 }
286 286
 
287 287
 func (ir *imageRouter) getImagesByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
288
-	img, err := ir.backend.GetImage(ctx, vars["name"], opts.GetImageOpts{Details: true})
288
+	img, err := ir.backend.GetImage(ctx, vars["name"], backend.GetImageOpts{Details: true})
289 289
 	if err != nil {
290 290
 		return err
291 291
 	}
... ...
@@ -353,7 +354,7 @@ func (ir *imageRouter) toImageInspect(img *image.Image) (*types.ImageInspect, er
353 353
 			Data: img.Details.Metadata,
354 354
 		},
355 355
 		RootFS: rootFSToAPIType(img.RootFS),
356
-		Metadata: opts.Metadata{
356
+		Metadata: imagetypes.Metadata{
357 357
 			LastTagTime: img.Details.LastUpdated,
358 358
 		},
359 359
 	}, nil
... ...
@@ -452,7 +453,7 @@ func (ir *imageRouter) postImagesTag(ctx context.Context, w http.ResponseWriter,
452 452
 		return errdefs.InvalidParameter(errors.New("refusing to create an ambiguous tag using digest algorithm as name"))
453 453
 	}
454 454
 
455
-	img, err := ir.backend.GetImage(ctx, vars["name"], opts.GetImageOpts{})
455
+	img, err := ir.backend.GetImage(ctx, vars["name"], backend.GetImageOpts{})
456 456
 	if err != nil {
457 457
 		return errdefs.NotFound(err)
458 458
 	}
... ...
@@ -130,6 +130,13 @@ type CreateImageConfig struct {
130 130
 	Changes []string
131 131
 }
132 132
 
133
+// GetImageOpts holds parameters to retrieve image information
134
+// from the backend.
135
+type GetImageOpts struct {
136
+	Platform *ocispec.Platform
137
+	Details  bool
138
+}
139
+
133 140
 // CommitConfig is the configuration for creating an image as part of a build.
134 141
 type CommitConfig struct {
135 142
 	Author              string
136 143
deleted file mode 100644
... ...
@@ -1,9 +0,0 @@
1
-package image
2
-
3
-import ocispec "github.com/opencontainers/image-spec/specs-go/v1"
4
-
5
-// GetImageOpts holds parameters to inspect an image.
6
-type GetImageOpts struct {
7
-	Platform *ocispec.Platform
8
-	Details  bool
9
-}
... ...
@@ -12,7 +12,6 @@ import (
12 12
 	"github.com/docker/docker/api/types/container"
13 13
 	"github.com/docker/docker/api/types/events"
14 14
 	"github.com/docker/docker/api/types/filters"
15
-	opts "github.com/docker/docker/api/types/image"
16 15
 	"github.com/docker/docker/api/types/network"
17 16
 	"github.com/docker/docker/api/types/registry"
18 17
 	"github.com/docker/docker/api/types/swarm"
... ...
@@ -78,5 +77,5 @@ type VolumeBackend interface {
78 78
 type ImageBackend interface {
79 79
 	PullImage(ctx context.Context, ref reference.Named, platform *ocispec.Platform, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error
80 80
 	GetRepositories(context.Context, reference.Named, *registry.AuthConfig) ([]distribution.Repository, error)
81
-	GetImage(ctx context.Context, refOrID string, options opts.GetImageOpts) (*image.Image, error)
81
+	GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*image.Image, error)
82 82
 }
... ...
@@ -17,7 +17,6 @@ import (
17 17
 	"github.com/docker/docker/api/types/backend"
18 18
 	containertypes "github.com/docker/docker/api/types/container"
19 19
 	"github.com/docker/docker/api/types/events"
20
-	imagetypes "github.com/docker/docker/api/types/image"
21 20
 	"github.com/docker/docker/api/types/registry"
22 21
 	containerpkg "github.com/docker/docker/container"
23 22
 	"github.com/docker/docker/daemon"
... ...
@@ -76,7 +75,7 @@ func (c *containerAdapter) pullImage(ctx context.Context) error {
76 76
 	named, err := reference.ParseNormalizedNamed(spec.Image)
77 77
 	if err == nil {
78 78
 		if _, ok := named.(reference.Canonical); ok {
79
-			_, err := c.imageBackend.GetImage(ctx, spec.Image, imagetypes.GetImageOpts{})
79
+			_, err := c.imageBackend.GetImage(ctx, spec.Image, backend.GetImageOpts{})
80 80
 			if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
81 81
 				return err
82 82
 			}
... ...
@@ -6,8 +6,8 @@ import (
6 6
 	"strings"
7 7
 
8 8
 	"github.com/containerd/log"
9
+	"github.com/docker/docker/api/types/backend"
9 10
 	"github.com/docker/docker/api/types/container"
10
-	imagetype "github.com/docker/docker/api/types/image"
11 11
 	"github.com/docker/docker/builder"
12 12
 	"github.com/docker/docker/errdefs"
13 13
 	"github.com/docker/docker/image"
... ...
@@ -31,7 +31,7 @@ func (i *ImageService) MakeImageCache(ctx context.Context, cacheFrom []string) (
31 31
 		}
32 32
 		for _, hi := range h {
33 33
 			if hi.ID != "<missing>" {
34
-				im, err := i.GetImage(ctx, hi.ID, imagetype.GetImageOpts{})
34
+				im, err := i.GetImage(ctx, hi.ID, backend.GetImageOpts{})
35 35
 				if err != nil {
36 36
 					return nil, err
37 37
 				}
... ...
@@ -99,7 +99,7 @@ func (ic *localCache) GetCache(parentID string, cfg *container.Config) (imageID
99 99
 		}
100 100
 
101 101
 		if isMatch(&cc, cfg) {
102
-			childImage, err := ic.imageService.GetImage(ctx, child.String(), imagetype.GetImageOpts{})
102
+			childImage, err := ic.imageService.GetImage(ctx, child.String(), backend.GetImageOpts{})
103 103
 			if err != nil {
104 104
 				return "", err
105 105
 			}
... ...
@@ -142,7 +142,7 @@ func (ic *imageCache) GetCache(parentID string, cfg *container.Config) (imageID
142 142
 	lenHistory := 0
143 143
 
144 144
 	if parentID != "" {
145
-		parent, err = ic.imageService.GetImage(ctx, parentID, imagetype.GetImageOpts{})
145
+		parent, err = ic.imageService.GetImage(ctx, parentID, backend.GetImageOpts{})
146 146
 		if err != nil {
147 147
 			return "", err
148 148
 		}
... ...
@@ -200,7 +200,7 @@ func (ic *imageCache) isParent(ctx context.Context, img *image.Image, parentID i
200 200
 		return parent == parentID.String()
201 201
 	}
202 202
 
203
-	p, err := ic.imageService.GetImage(ctx, parentID.String(), imagetype.GetImageOpts{})
203
+	p, err := ic.imageService.GetImage(ctx, parentID.String(), backend.GetImageOpts{})
204 204
 	if err != nil {
205 205
 		return false
206 206
 	}
... ...
@@ -15,7 +15,7 @@ import (
15 15
 	"github.com/containerd/containerd/platforms"
16 16
 	"github.com/containerd/log"
17 17
 	"github.com/distribution/reference"
18
-	imagetype "github.com/docker/docker/api/types/image"
18
+	"github.com/docker/docker/api/types/backend"
19 19
 	"github.com/docker/docker/daemon/images"
20 20
 	"github.com/docker/docker/errdefs"
21 21
 	"github.com/docker/docker/image"
... ...
@@ -31,7 +31,7 @@ var truncatedID = regexp.MustCompile(`^(sha256:)?([a-f0-9]{4,64})$`)
31 31
 var errInconsistentData error = errors.New("consistency error: data changed during operation, retry")
32 32
 
33 33
 // GetImage returns an image corresponding to the image referred to by refOrID.
34
-func (i *ImageService) GetImage(ctx context.Context, refOrID string, options imagetype.GetImageOpts) (*image.Image, error) {
34
+func (i *ImageService) GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*image.Image, error) {
35 35
 	desc, err := i.resolveImage(ctx, refOrID)
36 36
 	if err != nil {
37 37
 		return nil, err
... ...
@@ -156,7 +156,7 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
156 156
 	return img, nil
157 157
 }
158 158
 
159
-func (i *ImageService) GetImageManifest(ctx context.Context, refOrID string, options imagetype.GetImageOpts) (*ocispec.Descriptor, error) {
159
+func (i *ImageService) GetImageManifest(ctx context.Context, refOrID string, options backend.GetImageOpts) (*ocispec.Descriptor, error) {
160 160
 	platform := matchAllWithPreference(platforms.Default())
161 161
 	if options.Platform != nil {
162 162
 		platform = platforms.Only(*options.Platform)
... ...
@@ -23,7 +23,6 @@ import (
23 23
 	"github.com/distribution/reference"
24 24
 	"github.com/docker/docker/api/types/backend"
25 25
 	"github.com/docker/docker/api/types/container"
26
-	imagetypes "github.com/docker/docker/api/types/image"
27 26
 	"github.com/docker/docker/api/types/registry"
28 27
 	"github.com/docker/docker/builder"
29 28
 	"github.com/docker/docker/errdefs"
... ...
@@ -84,7 +83,7 @@ func (i *ImageService) GetImageAndReleasableLayer(ctx context.Context, refOrID s
84 84
 
85 85
 	if opts.PullOption != backend.PullOptionForcePull {
86 86
 		// TODO(laurazard): same as below
87
-		img, err := i.GetImage(ctx, refOrID, imagetypes.GetImageOpts{Platform: opts.Platform})
87
+		img, err := i.GetImage(ctx, refOrID, backend.GetImageOpts{Platform: opts.Platform})
88 88
 		if err != nil && opts.PullOption == backend.PullOptionNoPull {
89 89
 			return nil, nil, err
90 90
 		}
... ...
@@ -119,7 +118,7 @@ func (i *ImageService) GetImageAndReleasableLayer(ctx context.Context, refOrID s
119 119
 
120 120
 	// TODO(laurazard): pullForBuilder should return whatever we
121 121
 	// need here instead of having to go and get it again
122
-	img, err := i.GetImage(ctx, refOrID, imagetypes.GetImageOpts{
122
+	img, err := i.GetImage(ctx, refOrID, backend.GetImageOpts{
123 123
 		Platform: opts.Platform,
124 124
 	})
125 125
 	if err != nil {
... ...
@@ -156,7 +155,7 @@ func (i *ImageService) pullForBuilder(ctx context.Context, name string, authConf
156 156
 		return nil, err
157 157
 	}
158 158
 
159
-	img, err := i.GetImage(ctx, name, imagetypes.GetImageOpts{Platform: platform})
159
+	img, err := i.GetImage(ctx, name, backend.GetImageOpts{Platform: platform})
160 160
 	if err != nil {
161 161
 		if errdefs.IsNotFound(err) && img != nil && platform != nil {
162 162
 			imgPlat := ocispec.Platform{
... ...
@@ -4,8 +4,8 @@ import (
4 4
 	"context"
5 5
 
6 6
 	"github.com/containerd/containerd/images"
7
+	"github.com/docker/docker/api/types/backend"
7 8
 	"github.com/docker/docker/api/types/events"
8
-	imagetypes "github.com/docker/docker/api/types/image"
9 9
 )
10 10
 
11 11
 // LogImageEvent generates an event related to an image with only the default attributes.
... ...
@@ -13,7 +13,7 @@ func (i *ImageService) LogImageEvent(imageID, refName string, action events.Acti
13 13
 	ctx := context.TODO()
14 14
 	attributes := map[string]string{}
15 15
 
16
-	img, err := i.GetImage(ctx, imageID, imagetypes.GetImageOpts{})
16
+	img, err := i.GetImage(ctx, imageID, backend.GetImageOpts{})
17 17
 	if err == nil && img.Config != nil {
18 18
 		// image has not been removed yet.
19 19
 		// it could be missing if the event is `delete`.
... ...
@@ -15,6 +15,7 @@ import (
15 15
 	"github.com/containerd/log"
16 16
 	"github.com/distribution/reference"
17 17
 	"github.com/docker/docker/api/types"
18
+	"github.com/docker/docker/api/types/backend"
18 19
 	"github.com/docker/docker/api/types/filters"
19 20
 	imagetypes "github.com/docker/docker/api/types/image"
20 21
 	timetypes "github.com/docker/docker/api/types/time"
... ...
@@ -320,13 +321,13 @@ type imageFilterFunc func(image images.Image) bool
320 320
 func (i *ImageService) setupFilters(ctx context.Context, imageFilters filters.Args) (filterFunc imageFilterFunc, outErr error) {
321 321
 	var fltrs []imageFilterFunc
322 322
 	err := imageFilters.WalkValues("before", func(value string) error {
323
-		img, err := i.GetImage(ctx, value, imagetypes.GetImageOpts{})
323
+		img, err := i.GetImage(ctx, value, backend.GetImageOpts{})
324 324
 		if err != nil {
325 325
 			return err
326 326
 		}
327 327
 		if img != nil && img.Created != nil {
328 328
 			fltrs = append(fltrs, func(candidate images.Image) bool {
329
-				cand, err := i.GetImage(ctx, candidate.Name, imagetypes.GetImageOpts{})
329
+				cand, err := i.GetImage(ctx, candidate.Name, backend.GetImageOpts{})
330 330
 				if err != nil {
331 331
 					return false
332 332
 				}
... ...
@@ -340,13 +341,13 @@ func (i *ImageService) setupFilters(ctx context.Context, imageFilters filters.Ar
340 340
 	}
341 341
 
342 342
 	err = imageFilters.WalkValues("since", func(value string) error {
343
-		img, err := i.GetImage(ctx, value, imagetypes.GetImageOpts{})
343
+		img, err := i.GetImage(ctx, value, backend.GetImageOpts{})
344 344
 		if err != nil {
345 345
 			return err
346 346
 		}
347 347
 		if img != nil && img.Created != nil {
348 348
 			fltrs = append(fltrs, func(candidate images.Image) bool {
349
-				cand, err := i.GetImage(ctx, candidate.Name, imagetypes.GetImageOpts{})
349
+				cand, err := i.GetImage(ctx, candidate.Name, backend.GetImageOpts{})
350 350
 				if err != nil {
351 351
 					return false
352 352
 				}
... ...
@@ -12,7 +12,6 @@ import (
12 12
 	"github.com/docker/docker/api/types/backend"
13 13
 	containertypes "github.com/docker/docker/api/types/container"
14 14
 	"github.com/docker/docker/api/types/events"
15
-	imagetypes "github.com/docker/docker/api/types/image"
16 15
 	networktypes "github.com/docker/docker/api/types/network"
17 16
 	"github.com/docker/docker/container"
18 17
 	"github.com/docker/docker/daemon/config"
... ...
@@ -83,7 +82,7 @@ func (daemon *Daemon) containerCreate(ctx context.Context, daemonCfg *configStor
83 83
 	}
84 84
 
85 85
 	if opts.params.Platform == nil && opts.params.Config.Image != "" {
86
-		img, err := daemon.imageService.GetImage(ctx, opts.params.Config.Image, imagetypes.GetImageOpts{Platform: opts.params.Platform})
86
+		img, err := daemon.imageService.GetImage(ctx, opts.params.Config.Image, backend.GetImageOpts{Platform: opts.params.Platform})
87 87
 		if err != nil {
88 88
 			return containertypes.CreateResponse{}, err
89 89
 		}
... ...
@@ -139,7 +138,7 @@ func (daemon *Daemon) create(ctx context.Context, daemonCfg *config.Config, opts
139 139
 	)
140 140
 
141 141
 	if opts.params.Config.Image != "" {
142
-		img, err = daemon.imageService.GetImage(ctx, opts.params.Config.Image, imagetypes.GetImageOpts{Platform: opts.params.Platform})
142
+		img, err = daemon.imageService.GetImage(ctx, opts.params.Config.Image, backend.GetImageOpts{Platform: opts.params.Platform})
143 143
 		if err != nil {
144 144
 			return nil, err
145 145
 		}
... ...
@@ -147,7 +146,7 @@ func (daemon *Daemon) create(ctx context.Context, daemonCfg *config.Config, opts
147 147
 		// image manifest so we can store it and later deterministically
148 148
 		// resolve the specific image the container is running
149 149
 		if daemon.UsesSnapshotter() {
150
-			imgManifest, err = daemon.imageService.GetImageManifest(ctx, opts.params.Config.Image, imagetypes.GetImageOpts{Platform: opts.params.Platform})
150
+			imgManifest, err = daemon.imageService.GetImageManifest(ctx, opts.params.Config.Image, backend.GetImageOpts{Platform: opts.params.Platform})
151 151
 			if err != nil {
152 152
 				log.G(ctx).WithError(err).Error("failed to find image manifest")
153 153
 				return nil, err
... ...
@@ -40,7 +40,7 @@ type ImageService interface {
40 40
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
41 41
 	ImportImage(ctx context.Context, ref reference.Named, platform *ocispec.Platform, msg string, layerReader io.Reader, changes []string) (image.ID, error)
42 42
 	TagImage(ctx context.Context, imageID image.ID, newTag reference.Named) error
43
-	GetImage(ctx context.Context, refOrID string, options imagetype.GetImageOpts) (*image.Image, error)
43
+	GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*image.Image, error)
44 44
 	ImageHistory(ctx context.Context, name string) ([]*imagetype.HistoryResponseItem, error)
45 45
 	CommitImage(ctx context.Context, c backend.CommitConfig) (image.ID, error)
46 46
 	SquashImage(id, parent string) (string, error)
... ...
@@ -48,7 +48,7 @@ type ImageService interface {
48 48
 	// Containerd related methods
49 49
 
50 50
 	PrepareSnapshot(ctx context.Context, id string, parentImage string, platform *ocispec.Platform, setupInit func(string) error) error
51
-	GetImageManifest(ctx context.Context, refOrID string, options imagetype.GetImageOpts) (*ocispec.Descriptor, error)
51
+	GetImageManifest(ctx context.Context, refOrID string, options backend.GetImageOpts) (*ocispec.Descriptor, error)
52 52
 
53 53
 	// Layers
54 54
 
... ...
@@ -4,7 +4,7 @@ import (
4 4
 	"context"
5 5
 
6 6
 	"github.com/containerd/log"
7
-	imagetypes "github.com/docker/docker/api/types/image"
7
+	"github.com/docker/docker/api/types/backend"
8 8
 	"github.com/docker/docker/builder"
9 9
 	"github.com/docker/docker/image/cache"
10 10
 	"github.com/pkg/errors"
... ...
@@ -19,7 +19,7 @@ func (i *ImageService) MakeImageCache(ctx context.Context, sourceRefs []string)
19 19
 	cache := cache.New(i.imageStore)
20 20
 
21 21
 	for _, ref := range sourceRefs {
22
-		img, err := i.GetImage(ctx, ref, imagetypes.GetImageOpts{})
22
+		img, err := i.GetImage(ctx, ref, backend.GetImageOpts{})
23 23
 		if err != nil {
24 24
 			if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
25 25
 				return nil, err
... ...
@@ -13,7 +13,7 @@ import (
13 13
 	"github.com/containerd/containerd/platforms"
14 14
 	"github.com/containerd/log"
15 15
 	"github.com/distribution/reference"
16
-	imagetypes "github.com/docker/docker/api/types/image"
16
+	"github.com/docker/docker/api/types/backend"
17 17
 	"github.com/docker/docker/errdefs"
18 18
 	"github.com/docker/docker/image"
19 19
 	"github.com/docker/docker/layer"
... ...
@@ -164,7 +164,7 @@ func (i *ImageService) manifestMatchesPlatform(ctx context.Context, img *image.I
164 164
 }
165 165
 
166 166
 // GetImage returns an image corresponding to the image referred to by refOrID.
167
-func (i *ImageService) GetImage(ctx context.Context, refOrID string, options imagetypes.GetImageOpts) (*image.Image, error) {
167
+func (i *ImageService) GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*image.Image, error) {
168 168
 	img, err := i.getImage(ctx, refOrID, options)
169 169
 	if err != nil {
170 170
 		return nil, err
... ...
@@ -201,11 +201,11 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
201 201
 	return img, nil
202 202
 }
203 203
 
204
-func (i *ImageService) GetImageManifest(ctx context.Context, refOrID string, options imagetypes.GetImageOpts) (*ocispec.Descriptor, error) {
204
+func (i *ImageService) GetImageManifest(ctx context.Context, refOrID string, options backend.GetImageOpts) (*ocispec.Descriptor, error) {
205 205
 	panic("not implemented")
206 206
 }
207 207
 
208
-func (i *ImageService) getImage(ctx context.Context, refOrID string, options imagetypes.GetImageOpts) (retImg *image.Image, retErr error) {
208
+func (i *ImageService) getImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (retImg *image.Image, retErr error) {
209 209
 	defer func() {
210 210
 		if retErr != nil || retImg == nil || options.Platform == nil {
211 211
 			return
... ...
@@ -10,7 +10,6 @@ import (
10 10
 	"github.com/containerd/log"
11 11
 	"github.com/distribution/reference"
12 12
 	"github.com/docker/docker/api/types/backend"
13
-	imagetypes "github.com/docker/docker/api/types/image"
14 13
 	"github.com/docker/docker/api/types/registry"
15 14
 	"github.com/docker/docker/builder"
16 15
 	"github.com/docker/docker/errdefs"
... ...
@@ -172,7 +171,7 @@ func (i *ImageService) pullForBuilder(ctx context.Context, name string, authConf
172 172
 		return nil, err
173 173
 	}
174 174
 
175
-	img, err := i.GetImage(ctx, name, imagetypes.GetImageOpts{Platform: platform})
175
+	img, err := i.GetImage(ctx, name, backend.GetImageOpts{Platform: platform})
176 176
 	if errdefs.IsNotFound(err) && img != nil && platform != nil {
177 177
 		imgPlat := ocispec.Platform{
178 178
 			OS:           img.OS,
... ...
@@ -214,7 +213,7 @@ func (i *ImageService) GetImageAndReleasableLayer(ctx context.Context, refOrID s
214 214
 	}
215 215
 
216 216
 	if opts.PullOption != backend.PullOptionForcePull {
217
-		img, err := i.GetImage(ctx, refOrID, imagetypes.GetImageOpts{Platform: opts.Platform})
217
+		img, err := i.GetImage(ctx, refOrID, backend.GetImageOpts{Platform: opts.Platform})
218 218
 		if err != nil && opts.PullOption == backend.PullOptionNoPull {
219 219
 			return nil, nil, err
220 220
 		}
... ...
@@ -7,6 +7,7 @@ import (
7 7
 	"time"
8 8
 
9 9
 	"github.com/distribution/reference"
10
+	"github.com/docker/docker/api/types/backend"
10 11
 	"github.com/docker/docker/api/types/events"
11 12
 	imagetypes "github.com/docker/docker/api/types/image"
12 13
 	"github.com/docker/docker/container"
... ...
@@ -64,7 +65,7 @@ func (i *ImageService) ImageDelete(ctx context.Context, imageRef string, force,
64 64
 	start := time.Now()
65 65
 	records := []imagetypes.DeleteResponse{}
66 66
 
67
-	img, err := i.GetImage(ctx, imageRef, imagetypes.GetImageOpts{})
67
+	img, err := i.GetImage(ctx, imageRef, backend.GetImageOpts{})
68 68
 	if err != nil {
69 69
 		return nil, err
70 70
 	}
... ...
@@ -3,8 +3,8 @@ package images // import "github.com/docker/docker/daemon/images"
3 3
 import (
4 4
 	"context"
5 5
 
6
+	"github.com/docker/docker/api/types/backend"
6 7
 	"github.com/docker/docker/api/types/events"
7
-	imagetypes "github.com/docker/docker/api/types/image"
8 8
 )
9 9
 
10 10
 // LogImageEvent generates an event related to an image with only the default attributes.
... ...
@@ -12,7 +12,7 @@ func (i *ImageService) LogImageEvent(imageID, refName string, action events.Acti
12 12
 	ctx := context.TODO()
13 13
 	attributes := map[string]string{}
14 14
 
15
-	img, err := i.GetImage(ctx, imageID, imagetypes.GetImageOpts{})
15
+	img, err := i.GetImage(ctx, imageID, backend.GetImageOpts{})
16 16
 	if err == nil && img.Config != nil {
17 17
 		// image has not been removed yet.
18 18
 		// it could be missing if the event is `delete`.
... ...
@@ -6,6 +6,7 @@ import (
6 6
 	"time"
7 7
 
8 8
 	"github.com/distribution/reference"
9
+	"github.com/docker/docker/api/types/backend"
9 10
 	"github.com/docker/docker/api/types/image"
10 11
 	"github.com/docker/docker/layer"
11 12
 )
... ...
@@ -14,7 +15,7 @@ import (
14 14
 // name by walking the image lineage.
15 15
 func (i *ImageService) ImageHistory(ctx context.Context, name string) ([]*image.HistoryResponseItem, error) {
16 16
 	start := time.Now()
17
-	img, err := i.GetImage(ctx, name, image.GetImageOpts{})
17
+	img, err := i.GetImage(ctx, name, backend.GetImageOpts{})
18 18
 	if err != nil {
19 19
 		return nil, err
20 20
 	}
... ...
@@ -70,7 +71,7 @@ func (i *ImageService) ImageHistory(ctx context.Context, name string) ([]*image.
70 70
 		if id == "" {
71 71
 			break
72 72
 		}
73
-		histImg, err = i.GetImage(ctx, id.String(), image.GetImageOpts{})
73
+		histImg, err = i.GetImage(ctx, id.String(), backend.GetImageOpts{})
74 74
 		if err != nil {
75 75
 			break
76 76
 		}
... ...
@@ -9,6 +9,7 @@ import (
9 9
 
10 10
 	"github.com/distribution/reference"
11 11
 	"github.com/docker/docker/api/types"
12
+	"github.com/docker/docker/api/types/backend"
12 13
 	imagetypes "github.com/docker/docker/api/types/image"
13 14
 	timetypes "github.com/docker/docker/api/types/time"
14 15
 	"github.com/docker/docker/container"
... ...
@@ -46,7 +47,7 @@ func (i *ImageService) Images(ctx context.Context, opts types.ImageListOptions)
46 46
 
47 47
 	var beforeFilter, sinceFilter time.Time
48 48
 	err = opts.Filters.WalkValues("before", func(value string) error {
49
-		img, err := i.GetImage(ctx, value, imagetypes.GetImageOpts{})
49
+		img, err := i.GetImage(ctx, value, backend.GetImageOpts{})
50 50
 		if err != nil {
51 51
 			return err
52 52
 		}
... ...
@@ -81,7 +82,7 @@ func (i *ImageService) Images(ctx context.Context, opts types.ImageListOptions)
81 81
 	}
82 82
 
83 83
 	err = opts.Filters.WalkValues("since", func(value string) error {
84
-		img, err := i.GetImage(ctx, value, imagetypes.GetImageOpts{})
84
+		img, err := i.GetImage(ctx, value, backend.GetImageOpts{})
85 85
 		if err != nil {
86 86
 			return err
87 87
 		}
... ...
@@ -9,7 +9,7 @@ import (
9 9
 	"github.com/containerd/containerd/namespaces"
10 10
 	"github.com/containerd/log"
11 11
 	"github.com/distribution/reference"
12
-	imagetypes "github.com/docker/docker/api/types/image"
12
+	"github.com/docker/docker/api/types/backend"
13 13
 	"github.com/docker/docker/api/types/registry"
14 14
 	"github.com/docker/docker/distribution"
15 15
 	progressutils "github.com/docker/docker/distribution/utils"
... ...
@@ -38,7 +38,7 @@ func (i *ImageService) PullImage(ctx context.Context, ref reference.Named, platf
38 38
 		// we allow the image to have a non-matching architecture. The code
39 39
 		// below checks for this situation, and returns a warning to the client,
40 40
 		// as well as logging it to the daemon logs.
41
-		img, err := i.GetImage(ctx, ref.String(), imagetypes.GetImageOpts{Platform: platform})
41
+		img, err := i.GetImage(ctx, ref.String(), backend.GetImageOpts{Platform: platform})
42 42
 
43 43
 		// Note that this is a special case where GetImage returns both an image
44 44
 		// and an error: https://github.com/docker/docker/blob/v20.10.7/daemon/images/image.go#L175-L183
... ...
@@ -9,9 +9,9 @@ import (
9 9
 
10 10
 	"github.com/containerd/log"
11 11
 	"github.com/docker/docker/api/types"
12
+	"github.com/docker/docker/api/types/backend"
12 13
 	containertypes "github.com/docker/docker/api/types/container"
13 14
 	"github.com/docker/docker/api/types/filters"
14
-	imagetypes "github.com/docker/docker/api/types/image"
15 15
 	"github.com/docker/docker/container"
16 16
 	"github.com/docker/docker/errdefs"
17 17
 	"github.com/docker/docker/image"
... ...
@@ -294,7 +294,7 @@ func (daemon *Daemon) foldFilter(ctx context.Context, view *container.View, conf
294 294
 	if psFilters.Contains("ancestor") {
295 295
 		ancestorFilter = true
296 296
 		err := psFilters.WalkValues("ancestor", func(ancestor string) error {
297
-			img, err := daemon.imageService.GetImage(ctx, ancestor, imagetypes.GetImageOpts{})
297
+			img, err := daemon.imageService.GetImage(ctx, ancestor, backend.GetImageOpts{})
298 298
 			if err != nil {
299 299
 				log.G(ctx).Warnf("Error while looking up for image %v", ancestor)
300 300
 				return nil
... ...
@@ -594,7 +594,7 @@ func (daemon *Daemon) refreshImage(ctx context.Context, s *container.Snapshot) (
594 594
 	}
595 595
 
596 596
 	// Check if the image reference still resolves to the same digest.
597
-	img, err := daemon.imageService.GetImage(ctx, s.Image, imagetypes.GetImageOpts{})
597
+	img, err := daemon.imageService.GetImage(ctx, s.Image, backend.GetImageOpts{})
598 598
 	// If the image is no longer found or can't be resolved for some other
599 599
 	// reason. Update the Image to the specific ID of the original image it
600 600
 	// resolved to when the container was created.
... ...
@@ -11,8 +11,8 @@ import (
11 11
 	"github.com/Microsoft/hcsshim"
12 12
 	coci "github.com/containerd/containerd/oci"
13 13
 	"github.com/containerd/log"
14
+	"github.com/docker/docker/api/types/backend"
14 15
 	containertypes "github.com/docker/docker/api/types/container"
15
-	imagetypes "github.com/docker/docker/api/types/image"
16 16
 	"github.com/docker/docker/container"
17 17
 	"github.com/docker/docker/daemon/config"
18 18
 	"github.com/docker/docker/errdefs"
... ...
@@ -93,7 +93,7 @@ func (daemon *Daemon) isHyperV(c *container.Container) bool {
93 93
 }
94 94
 
95 95
 func (daemon *Daemon) createSpec(ctx context.Context, daemonCfg *configStore, c *container.Container, mounts []container.Mount) (*specs.Spec, error) {
96
-	img, err := daemon.imageService.GetImage(ctx, string(c.ImageID), imagetypes.GetImageOpts{})
96
+	img, err := daemon.imageService.GetImage(ctx, string(c.ImageID), backend.GetImageOpts{})
97 97
 	if err != nil {
98 98
 		return nil, err
99 99
 	}