Skip to content

Commit 3a09b56

Browse files
author
John Howard
committed
LCOW: Rework after 33454 merged which refactored daemon/builder interface
Signed-off-by: John Howard <[email protected]>
1 parent b21d9ab commit 3a09b56

File tree

5 files changed

+18
-14
lines changed

5 files changed

+18
-14
lines changed

builder/builder.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type Backend interface {
4343
// ContainerCreateWorkdir creates the workdir
4444
ContainerCreateWorkdir(containerID string) error
4545

46-
CreateImage(config []byte, parent string) (Image, error)
46+
CreateImage(config []byte, parent string, platform string) (Image, error)
4747

4848
ImageCacheBuilder
4949
}
@@ -100,6 +100,6 @@ type Image interface {
100100
type ReleaseableLayer interface {
101101
Release() error
102102
Mount() (string, error)
103-
Commit() (ReleaseableLayer, error)
103+
Commit(platform string) (ReleaseableLayer, error)
104104
DiffID() layer.DiffID
105105
}

builder/dockerfile/internals.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (b *Builder) commitContainer(dispatchState *dispatchState, id string, conta
6565
}
6666

6767
func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runConfig *container.Config) error {
68-
newLayer, err := imageMount.Layer().Commit()
68+
newLayer, err := imageMount.Layer().Commit(b.platform)
6969
if err != nil {
7070
return err
7171
}
@@ -93,7 +93,7 @@ func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runC
9393
return errors.Wrap(err, "failed to encode image config")
9494
}
9595

96-
exportedImage, err := b.docker.CreateImage(config, state.imageID)
96+
exportedImage, err := b.docker.CreateImage(config, state.imageID, parentImage.OS)
9797
if err != nil {
9898
return errors.Wrapf(err, "failed to export image")
9999
}

builder/dockerfile/mockbackend_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (m *MockBackend) MakeImageCache(cacheFrom []string, platform string) builde
7878
return nil
7979
}
8080

81-
func (m *MockBackend) CreateImage(config []byte, parent string) (builder.Image, error) {
81+
func (m *MockBackend) CreateImage(config []byte, parent string, platform string) (builder.Image, error) {
8282
return nil, nil
8383
}
8484

@@ -121,7 +121,7 @@ func (l *mockLayer) Mount() (string, error) {
121121
return "mountPath", nil
122122
}
123123

124-
func (l *mockLayer) Commit() (builder.ReleaseableLayer, error) {
124+
func (l *mockLayer) Commit(string) (builder.ReleaseableLayer, error) {
125125
return nil, nil
126126
}
127127

daemon/build.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package daemon
22

33
import (
44
"io"
5+
"runtime"
56

67
"github.com/Sirupsen/logrus"
78
"github.com/docker/distribution/reference"
@@ -39,7 +40,7 @@ func (rl *releaseableLayer) Mount() (string, error) {
3940
return rl.rwLayer.Mount("")
4041
}
4142

42-
func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) {
43+
func (rl *releaseableLayer) Commit(platform string) (builder.ReleaseableLayer, error) {
4344
var chainID layer.ChainID
4445
if rl.roLayer != nil {
4546
chainID = rl.roLayer.ChainID()
@@ -50,7 +51,7 @@ func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) {
5051
return nil, err
5152
}
5253

53-
newLayer, err := rl.layerStore.Register(stream, chainID)
54+
newLayer, err := rl.layerStore.Register(stream, chainID, layer.Platform(platform))
5455
if err != nil {
5556
return nil, err
5657
}
@@ -139,7 +140,7 @@ func (daemon *Daemon) pullForBuilder(ctx context.Context, name string, authConfi
139140
// leaking of layers.
140141
func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ReleaseableLayer, error) {
141142
if refOrID == "" {
142-
layer, err := newReleasableLayerForImage(nil, daemon.layerStore)
143+
layer, err := newReleasableLayerForImage(nil, daemon.stores[opts.Platform].layerStore)
143144
return nil, layer, err
144145
}
145146

@@ -163,19 +164,22 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
163164
// CreateImage creates a new image by adding a config and ID to the image store.
164165
// This is similar to LoadImage() except that it receives JSON encoded bytes of
165166
// an image instead of a tar archive.
166-
func (daemon *Daemon) CreateImage(config []byte, parent string) (builder.Image, error) {
167-
id, err := daemon.imageStore.Create(config)
167+
func (daemon *Daemon) CreateImage(config []byte, parent string, platform string) (builder.Image, error) {
168+
if platform == "" {
169+
platform = runtime.GOOS
170+
}
171+
id, err := daemon.stores[platform].imageStore.Create(config)
168172
if err != nil {
169173
return nil, errors.Wrapf(err, "failed to create image")
170174
}
171175

172176
if parent != "" {
173-
if err := daemon.imageStore.SetParent(id, image.ID(parent)); err != nil {
177+
if err := daemon.stores[platform].imageStore.SetParent(id, image.ID(parent)); err != nil {
174178
return nil, errors.Wrapf(err, "failed to set parent %s", parent)
175179
}
176180
}
177181

178-
return daemon.imageStore.Get(id)
182+
return daemon.stores[platform].imageStore.Get(id)
179183
}
180184

181185
// IDMappings returns uid/gid mappings for the builder

daemon/commit.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str
170170
}
171171
}
172172

173-
l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, rootFS.ChainID(), layer.Platform(container.Platform))
173+
l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, parent.RootFS.ChainID(), layer.Platform(container.Platform))
174174
if err != nil {
175175
return "", err
176176
}

0 commit comments

Comments
 (0)