diff --git a/components/engine/builder/builder.go b/components/engine/builder/builder.go index 5cd6c838f9..30c1ee69d8 100644 --- a/components/engine/builder/builder.go +++ b/components/engine/builder/builder.go @@ -78,7 +78,7 @@ type Result struct { // ImageCacheBuilder represents a generator for stateful image cache. type ImageCacheBuilder interface { // MakeImageCache creates a stateful image cache. - MakeImageCache(cacheFrom []string) ImageCache + MakeImageCache(cacheFrom []string, platform string) ImageCache } // ImageCache abstracts an image cache. diff --git a/components/engine/builder/dockerfile/builder.go b/components/engine/builder/dockerfile/builder.go index 9be7b7fa01..86f8f450af 100644 --- a/components/engine/builder/dockerfile/builder.go +++ b/components/engine/builder/dockerfile/builder.go @@ -166,7 +166,7 @@ func newBuilder(clientCtx context.Context, options builderOptions) *Builder { buildStages: newBuildStages(), imageSources: newImageSources(clientCtx, options), pathCache: options.PathCache, - imageProber: newImageProber(options.Backend, config.CacheFrom, config.NoCache), + imageProber: newImageProber(options.Backend, config.CacheFrom, options.Platform, config.NoCache), containerManager: newContainerManager(options.Backend), platform: options.Platform, } diff --git a/components/engine/builder/dockerfile/dispatchers_test.go b/components/engine/builder/dockerfile/dispatchers_test.go index bc36e9704d..7f8e4d7b9c 100644 --- a/components/engine/builder/dockerfile/dispatchers_test.go +++ b/components/engine/builder/dockerfile/dispatchers_test.go @@ -63,7 +63,7 @@ func newBuilderWithMockBackend() *Builder { Backend: mockBackend, }), buildStages: newBuildStages(), - imageProber: newImageProber(mockBackend, nil, false), + imageProber: newImageProber(mockBackend, nil, runtime.GOOS, false), containerManager: newContainerManager(mockBackend), } return b @@ -488,10 +488,10 @@ func TestRunWithBuildArgs(t *testing.T) { } mockBackend := b.docker.(*MockBackend) - mockBackend.makeImageCacheFunc = func(_ []string) builder.ImageCache { + mockBackend.makeImageCacheFunc = func(_ []string, _ string) builder.ImageCache { return imageCache } - b.imageProber = newImageProber(mockBackend, nil, false) + b.imageProber = newImageProber(mockBackend, nil, runtime.GOOS, false) mockBackend.getImageFunc = func(_ string) (builder.Image, builder.ReleaseableLayer, error) { return &mockImage{ id: "abcdef", diff --git a/components/engine/builder/dockerfile/imageprobe.go b/components/engine/builder/dockerfile/imageprobe.go index 3a3942888c..3433612de5 100644 --- a/components/engine/builder/dockerfile/imageprobe.go +++ b/components/engine/builder/dockerfile/imageprobe.go @@ -19,13 +19,13 @@ type imageProber struct { cacheBusted bool } -func newImageProber(cacheBuilder builder.ImageCacheBuilder, cacheFrom []string, noCache bool) ImageProber { +func newImageProber(cacheBuilder builder.ImageCacheBuilder, cacheFrom []string, platform string, noCache bool) ImageProber { if noCache { return &nopProber{} } reset := func() builder.ImageCache { - return cacheBuilder.MakeImageCache(cacheFrom) + return cacheBuilder.MakeImageCache(cacheFrom, platform) } return &imageProber{cache: reset(), reset: reset} } diff --git a/components/engine/builder/dockerfile/mockbackend_test.go b/components/engine/builder/dockerfile/mockbackend_test.go index 876bb91f1b..277f24a41d 100644 --- a/components/engine/builder/dockerfile/mockbackend_test.go +++ b/components/engine/builder/dockerfile/mockbackend_test.go @@ -18,7 +18,7 @@ type MockBackend struct { containerCreateFunc func(config types.ContainerCreateConfig) (container.ContainerCreateCreatedBody, error) commitFunc func(string, *backend.ContainerCommitConfig) (string, error) getImageFunc func(string) (builder.Image, builder.ReleaseableLayer, error) - makeImageCacheFunc func(cacheFrom []string) builder.ImageCache + makeImageCacheFunc func(cacheFrom []string, platform string) builder.ImageCache } func (m *MockBackend) ContainerAttachRaw(cID string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool, attached chan struct{}) error { @@ -71,9 +71,9 @@ func (m *MockBackend) GetImageAndReleasableLayer(ctx context.Context, refOrID st return &mockImage{id: "theid"}, &mockLayer{}, nil } -func (m *MockBackend) MakeImageCache(cacheFrom []string) builder.ImageCache { +func (m *MockBackend) MakeImageCache(cacheFrom []string, platform string) builder.ImageCache { if m.makeImageCacheFunc != nil { - return m.makeImageCacheFunc(cacheFrom) + return m.makeImageCacheFunc(cacheFrom, platform) } return nil } diff --git a/components/engine/daemon/cache.go b/components/engine/daemon/cache.go index 88d4e38fd4..219b0b38da 100644 --- a/components/engine/daemon/cache.go +++ b/components/engine/daemon/cache.go @@ -1,22 +1,18 @@ package daemon import ( - "runtime" - "github.com/Sirupsen/logrus" "github.com/docker/docker/builder" "github.com/docker/docker/image/cache" ) // MakeImageCache creates a stateful image cache. -func (daemon *Daemon) MakeImageCache(sourceRefs []string) builder.ImageCache { +func (daemon *Daemon) MakeImageCache(sourceRefs []string, platform string) builder.ImageCache { if len(sourceRefs) == 0 { - // TODO @jhowardmsft LCOW. For now, assume it is the OS of the host - return cache.NewLocal(daemon.stores[runtime.GOOS].imageStore) + return cache.NewLocal(daemon.stores[platform].imageStore) } - // TODO @jhowardmsft LCOW. For now, assume it is the OS of the host - cache := cache.New(daemon.stores[runtime.GOOS].imageStore) + cache := cache.New(daemon.stores[platform].imageStore) for _, ref := range sourceRefs { img, err := daemon.GetImage(ref)