diff --git a/api/server/backend/build/backend.go b/api/server/backend/build/backend.go index 01d5c9e85d..0d4fb9004b 100644 --- a/api/server/backend/build/backend.go +++ b/api/server/backend/build/backend.go @@ -92,7 +92,7 @@ func (b *Backend) Build(ctx context.Context, config backend.BuildConfig) (string stdout := config.ProgressWriter.StdoutFormatter fmt.Fprintf(stdout, "Successfully built %s\n", stringid.TruncateID(imageID)) } - if imageID != "" { + if imageID != "" && !useBuildKit { err = tagImages(ctx, b.imageComponent, config.ProgressWriter.StdoutFormatter, image.ID(imageID), tags) } return imageID, err diff --git a/builder/builder-next/builder.go b/builder/builder-next/builder.go index 3743ea736f..a262da7fcc 100644 --- a/builder/builder-next/builder.go +++ b/builder/builder-next/builder.go @@ -16,7 +16,8 @@ import ( "github.com/docker/docker/api/types/backend" timetypes "github.com/docker/docker/api/types/time" "github.com/docker/docker/builder" - mobyexporter "github.com/docker/docker/builder/builder-next/exporter" + "github.com/docker/docker/builder/builder-next/exporter" + "github.com/docker/docker/builder/builder-next/exporter/mobyexporter" "github.com/docker/docker/builder/builder-next/exporter/overrides" "github.com/docker/docker/daemon/config" "github.com/docker/docker/daemon/images" @@ -78,6 +79,7 @@ type Opt struct { SessionManager *session.Manager Root string Dist images.DistributionServices + ImageTagger mobyexporter.ImageTagger NetworkController *libnetwork.Controller DefaultCgroupParent string RegistryHosts docker.RegistryHosts @@ -355,7 +357,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder. if b.useSnapshotter { exporterName = client.ExporterImage } else { - exporterName = mobyexporter.Moby + exporterName = exporter.Moby } } else { // cacheonly is a special type for triggering skipping all exporters @@ -365,7 +367,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder. } } - if (exporterName == client.ExporterImage || exporterName == mobyexporter.Moby) && len(opt.Options.Tags) > 0 { + if (exporterName == client.ExporterImage || exporterName == exporter.Moby) && len(opt.Options.Tags) > 0 { nameAttr, err := overrides.SanitizeRepoAndTags(opt.Options.Tags) if err != nil { return nil, err @@ -408,7 +410,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder. if err != nil { return err } - if exporterName != mobyexporter.Moby && exporterName != client.ExporterImage { + if exporterName != exporter.Moby && exporterName != client.ExporterImage { return nil } id, ok := resp.ExporterResponse["containerimage.digest"] diff --git a/builder/builder-next/controller.go b/builder/builder-next/controller.go index 5bf69b1d84..c1a419e322 100644 --- a/builder/builder-next/controller.go +++ b/builder/builder-next/controller.go @@ -275,9 +275,9 @@ func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt } exp, err := mobyexporter.New(mobyexporter.Opt{ - ImageStore: dist.ImageStore, - ReferenceStore: dist.ReferenceStore, - Differ: differ, + ImageStore: dist.ImageStore, + Differ: differ, + ImageTagger: opt.ImageTagger, }) if err != nil { return nil, err diff --git a/builder/builder-next/exporter/mobyexporter/export.go b/builder/builder-next/exporter/mobyexporter/export.go index 0161383704..d7aff8a879 100644 --- a/builder/builder-next/exporter/mobyexporter/export.go +++ b/builder/builder-next/exporter/mobyexporter/export.go @@ -9,7 +9,6 @@ import ( distref "github.com/docker/distribution/reference" "github.com/docker/docker/image" "github.com/docker/docker/layer" - "github.com/docker/docker/reference" "github.com/moby/buildkit/exporter" "github.com/moby/buildkit/exporter/containerimage/exptypes" "github.com/opencontainers/go-digest" @@ -25,11 +24,15 @@ type Differ interface { EnsureLayer(ctx context.Context, key string) ([]layer.DiffID, error) } +type ImageTagger interface { + TagImage(ctx context.Context, imageID image.ID, newTag distref.Named) error +} + // Opt defines a struct for creating new exporter type Opt struct { - ImageStore image.Store - ReferenceStore reference.Store - Differ Differ + ImageStore image.Store + Differ Differ + ImageTagger ImageTagger } type imageExporter struct { @@ -168,10 +171,10 @@ func (e *imageExporterInstance) Export(ctx context.Context, inp *exporter.Source } _ = configDone(nil) - if e.opt.ReferenceStore != nil { + if e.opt.ImageTagger != nil { for _, targetName := range e.targetNames { tagDone := oneOffProgress(ctx, "naming to "+targetName.String()) - if err := e.opt.ReferenceStore.AddTag(targetName, digest.Digest(id), true); err != nil { + if err := e.opt.ImageTagger.TagImage(ctx, image.ID(digest.Digest(id)), targetName); err != nil { return nil, nil, tagDone(err) } _ = tagDone(nil) diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go index d6ead6ef3b..ba3ab234f1 100644 --- a/cmd/dockerd/daemon.go +++ b/cmd/dockerd/daemon.go @@ -297,6 +297,7 @@ func newRouterOptions(ctx context.Context, config *config.Config, d *daemon.Daem SessionManager: sm, Root: filepath.Join(config.Root, "buildkit"), Dist: d.DistributionServices(), + ImageTagger: d.ImageService(), NetworkController: d.NetworkController(), DefaultCgroupParent: cgroupParent, RegistryHosts: d.RegistryHosts(),