ソースを参照

Merge pull request #45404 from rumpl/fix-buildx-tag-events

Use the image service instead of the reference store for tagging
Sebastiaan van Stijn 2 年 前
コミット
ce3ad31e2e

+ 1 - 1
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
 		stdout := config.ProgressWriter.StdoutFormatter
 		fmt.Fprintf(stdout, "Successfully built %s\n", stringid.TruncateID(imageID))
 		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)
 		err = tagImages(ctx, b.imageComponent, config.ProgressWriter.StdoutFormatter, image.ID(imageID), tags)
 	}
 	}
 	return imageID, err
 	return imageID, err

+ 6 - 4
builder/builder-next/builder.go

@@ -16,7 +16,8 @@ import (
 	"github.com/docker/docker/api/types/backend"
 	"github.com/docker/docker/api/types/backend"
 	timetypes "github.com/docker/docker/api/types/time"
 	timetypes "github.com/docker/docker/api/types/time"
 	"github.com/docker/docker/builder"
 	"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/builder/builder-next/exporter/overrides"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/images"
 	"github.com/docker/docker/daemon/images"
@@ -78,6 +79,7 @@ type Opt struct {
 	SessionManager      *session.Manager
 	SessionManager      *session.Manager
 	Root                string
 	Root                string
 	Dist                images.DistributionServices
 	Dist                images.DistributionServices
+	ImageTagger         mobyexporter.ImageTagger
 	NetworkController   *libnetwork.Controller
 	NetworkController   *libnetwork.Controller
 	DefaultCgroupParent string
 	DefaultCgroupParent string
 	RegistryHosts       docker.RegistryHosts
 	RegistryHosts       docker.RegistryHosts
@@ -355,7 +357,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
 		if b.useSnapshotter {
 		if b.useSnapshotter {
 			exporterName = client.ExporterImage
 			exporterName = client.ExporterImage
 		} else {
 		} else {
-			exporterName = mobyexporter.Moby
+			exporterName = exporter.Moby
 		}
 		}
 	} else {
 	} else {
 		// cacheonly is a special type for triggering skipping all exporters
 		// 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)
 		nameAttr, err := overrides.SanitizeRepoAndTags(opt.Options.Tags)
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
@@ -408,7 +410,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}
-		if exporterName != mobyexporter.Moby && exporterName != client.ExporterImage {
+		if exporterName != exporter.Moby && exporterName != client.ExporterImage {
 			return nil
 			return nil
 		}
 		}
 		id, ok := resp.ExporterResponse["containerimage.digest"]
 		id, ok := resp.ExporterResponse["containerimage.digest"]

+ 3 - 3
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{
 	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 {
 	if err != nil {
 		return nil, err
 		return nil, err

+ 9 - 6
builder/builder-next/exporter/mobyexporter/export.go

@@ -9,7 +9,6 @@ import (
 	distref "github.com/docker/distribution/reference"
 	distref "github.com/docker/distribution/reference"
 	"github.com/docker/docker/image"
 	"github.com/docker/docker/image"
 	"github.com/docker/docker/layer"
 	"github.com/docker/docker/layer"
-	"github.com/docker/docker/reference"
 	"github.com/moby/buildkit/exporter"
 	"github.com/moby/buildkit/exporter"
 	"github.com/moby/buildkit/exporter/containerimage/exptypes"
 	"github.com/moby/buildkit/exporter/containerimage/exptypes"
 	"github.com/opencontainers/go-digest"
 	"github.com/opencontainers/go-digest"
@@ -25,11 +24,15 @@ type Differ interface {
 	EnsureLayer(ctx context.Context, key string) ([]layer.DiffID, error)
 	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
 // Opt defines a struct for creating new exporter
 type Opt struct {
 type Opt struct {
-	ImageStore     image.Store
-	ReferenceStore reference.Store
-	Differ         Differ
+	ImageStore  image.Store
+	Differ      Differ
+	ImageTagger ImageTagger
 }
 }
 
 
 type imageExporter struct {
 type imageExporter struct {
@@ -168,10 +171,10 @@ func (e *imageExporterInstance) Export(ctx context.Context, inp *exporter.Source
 	}
 	}
 	_ = configDone(nil)
 	_ = configDone(nil)
 
 
-	if e.opt.ReferenceStore != nil {
+	if e.opt.ImageTagger != nil {
 		for _, targetName := range e.targetNames {
 		for _, targetName := range e.targetNames {
 			tagDone := oneOffProgress(ctx, "naming to "+targetName.String())
 			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)
 				return nil, nil, tagDone(err)
 			}
 			}
 			_ = tagDone(nil)
 			_ = tagDone(nil)

+ 1 - 0
cmd/dockerd/daemon.go

@@ -297,6 +297,7 @@ func newRouterOptions(ctx context.Context, config *config.Config, d *daemon.Daem
 		SessionManager:      sm,
 		SessionManager:      sm,
 		Root:                filepath.Join(config.Root, "buildkit"),
 		Root:                filepath.Join(config.Root, "buildkit"),
 		Dist:                d.DistributionServices(),
 		Dist:                d.DistributionServices(),
+		ImageTagger:         d.ImageService(),
 		NetworkController:   d.NetworkController(),
 		NetworkController:   d.NetworkController(),
 		DefaultCgroupParent: cgroupParent,
 		DefaultCgroupParent: cgroupParent,
 		RegistryHosts:       d.RegistryHosts(),
 		RegistryHosts:       d.RegistryHosts(),