|
@@ -2,6 +2,7 @@ package daemon
|
|
|
|
|
|
import (
|
|
|
"io"
|
|
|
+ "runtime"
|
|
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
|
"github.com/docker/distribution/reference"
|
|
@@ -39,7 +40,7 @@ func (rl *releaseableLayer) Mount() (string, error) {
|
|
|
return rl.rwLayer.Mount("")
|
|
|
}
|
|
|
|
|
|
-func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) {
|
|
|
+func (rl *releaseableLayer) Commit(platform string) (builder.ReleaseableLayer, error) {
|
|
|
var chainID layer.ChainID
|
|
|
if rl.roLayer != nil {
|
|
|
chainID = rl.roLayer.ChainID()
|
|
@@ -50,7 +51,7 @@ func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- newLayer, err := rl.layerStore.Register(stream, chainID)
|
|
|
+ newLayer, err := rl.layerStore.Register(stream, chainID, layer.Platform(platform))
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -139,7 +140,7 @@ func (daemon *Daemon) pullForBuilder(ctx context.Context, name string, authConfi
|
|
|
// leaking of layers.
|
|
|
func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ReleaseableLayer, error) {
|
|
|
if refOrID == "" {
|
|
|
- layer, err := newReleasableLayerForImage(nil, daemon.layerStore)
|
|
|
+ layer, err := newReleasableLayerForImage(nil, daemon.stores[opts.Platform].layerStore)
|
|
|
return nil, layer, err
|
|
|
}
|
|
|
|
|
@@ -163,19 +164,22 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
|
|
|
// CreateImage creates a new image by adding a config and ID to the image store.
|
|
|
// This is similar to LoadImage() except that it receives JSON encoded bytes of
|
|
|
// an image instead of a tar archive.
|
|
|
-func (daemon *Daemon) CreateImage(config []byte, parent string) (builder.Image, error) {
|
|
|
- id, err := daemon.imageStore.Create(config)
|
|
|
+func (daemon *Daemon) CreateImage(config []byte, parent string, platform string) (builder.Image, error) {
|
|
|
+ if platform == "" {
|
|
|
+ platform = runtime.GOOS
|
|
|
+ }
|
|
|
+ id, err := daemon.stores[platform].imageStore.Create(config)
|
|
|
if err != nil {
|
|
|
return nil, errors.Wrapf(err, "failed to create image")
|
|
|
}
|
|
|
|
|
|
if parent != "" {
|
|
|
- if err := daemon.imageStore.SetParent(id, image.ID(parent)); err != nil {
|
|
|
+ if err := daemon.stores[platform].imageStore.SetParent(id, image.ID(parent)); err != nil {
|
|
|
return nil, errors.Wrapf(err, "failed to set parent %s", parent)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return daemon.imageStore.Get(id)
|
|
|
+ return daemon.stores[platform].imageStore.Get(id)
|
|
|
}
|
|
|
|
|
|
// IDMappings returns uid/gid mappings for the builder
|