diff --git a/daemon/containerd/image_snapshot.go b/daemon/containerd/image_snapshot.go index 24f2fd62b4ecf..0cb2084387408 100644 --- a/daemon/containerd/image_snapshot.go +++ b/daemon/containerd/image_snapshot.go @@ -21,7 +21,7 @@ import ( ) // CreateLayer creates a new layer for a container. -func (i *ImageService) CreateLayer(ctr *container.Container, initFunc layer.MountInit) (container.RWLayer, error) { +func (i *ImageService) CreateLayer(ctr *container.Container, initFunc layer.MountInit, labels map[string]string) (container.RWLayer, error) { var descriptor *ocispec.Descriptor if ctr.ImageManifest != nil { descriptor = ctr.ImageManifest @@ -31,7 +31,7 @@ func (i *ImageService) CreateLayer(ctr *container.Container, initFunc layer.Moun StorageOpt: ctr.HostConfig.StorageOpt, } - return i.createLayer(descriptor, ctr.ID, rwLayerOpts, initFunc) + return i.createLayer(descriptor, ctr.ID, rwLayerOpts, initFunc, labels) } // CreateLayerFromImage creates a new layer from an image @@ -41,10 +41,10 @@ func (i *ImageService) CreateLayerFromImage(img *image.Image, layerName string, descriptor = img.Details.ManifestDescriptor } - return i.createLayer(descriptor, layerName, rwLayerOpts, nil) + return i.createLayer(descriptor, layerName, rwLayerOpts, nil, nil) } -func (i *ImageService) createLayer(descriptor *ocispec.Descriptor, layerName string, rwLayerOpts *layer.CreateRWLayerOpts, initFunc layer.MountInit) (container.RWLayer, error) { +func (i *ImageService) createLayer(descriptor *ocispec.Descriptor, layerName string, rwLayerOpts *layer.CreateRWLayerOpts, initFunc layer.MountInit, labels map[string]string) (container.RWLayer, error) { ctx := context.TODO() var parentSnapshot string if descriptor != nil { @@ -78,7 +78,11 @@ func (i *ImageService) createLayer(descriptor *ocispec.Descriptor, layerName str if !i.idMapping.Empty() { err = i.remapSnapshot(ctx, sn, layerName, parentSnapshot) } else { - _, err = sn.Prepare(ctx, layerName, parentSnapshot) + sopts := []snapshots.Opt { + snapshots.WithLabels(labels), + } + + _, err = sn.Prepare(ctx, layerName, parentSnapshot, sopts...) } if err != nil { diff --git a/daemon/create.go b/daemon/create.go index 5ac5fd453f560..1dd8c4ab84536 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -228,7 +228,7 @@ func (daemon *Daemon) create(ctx context.Context, daemonCfg *config.Config, opts ctr.ImageManifest = imgManifest // Set RWLayer for container after mount labels have been set - rwLayer, err := daemon.imageService.CreateLayer(ctr, setupInitLayer(daemon.idMapping.RootPair())) + rwLayer, err := daemon.imageService.CreateLayer(ctr, setupInitLayer(daemon.idMapping.RootPair()), opts.params.Config.Labels) if err != nil { return nil, errdefs.System(err) } diff --git a/daemon/image_service.go b/daemon/image_service.go index 8293d5e16f053..35775d84f9824 100644 --- a/daemon/image_service.go +++ b/daemon/image_service.go @@ -47,7 +47,7 @@ type ImageService interface { // Layers GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ROLayer, error) - CreateLayer(container *container.Container, initFunc layer.MountInit) (container.RWLayer, error) + CreateLayer(container *container.Container, initFunc layer.MountInit, labels map[string]string) (container.RWLayer, error) CreateLayerFromImage(img *image.Image, layerName string, rwLayerOpts *layer.CreateRWLayerOpts) (container.RWLayer, error) GetLayerByID(cid string) (container.RWLayer, error) LayerStoreStatus() [][2]string diff --git a/daemon/images/service.go b/daemon/images/service.go index 1c6167197c981..2ea09484dc6e1 100644 --- a/daemon/images/service.go +++ b/daemon/images/service.go @@ -118,7 +118,7 @@ func (i *ImageService) Children(_ context.Context, id image.ID) ([]image.ID, err // CreateLayer creates a filesystem layer for a container. // called from create.go // TODO: accept an opt struct instead of container? -func (i *ImageService) CreateLayer(container *container.Container, initFunc layer.MountInit) (container.RWLayer, error) { +func (i *ImageService) CreateLayer(container *container.Container, initFunc layer.MountInit, labels map[string]string) (container.RWLayer, error) { var img *image.Image if container.ImageID != "" { containerImg, err := i.imageStore.Get(container.ImageID)