浏览代码

builder: allow setting host/none network mode

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Tonis Tiigi 7 年之前
父节点
当前提交
c6c680ad5b
共有 1 个文件被更改,包括 18 次插入0 次删除
  1. 18 0
      builder/builder-next/builder.go

+ 18 - 0
builder/builder-next/builder.go

@@ -20,12 +20,18 @@ import (
 	"github.com/moby/buildkit/control"
 	"github.com/moby/buildkit/control"
 	"github.com/moby/buildkit/identity"
 	"github.com/moby/buildkit/identity"
 	"github.com/moby/buildkit/session"
 	"github.com/moby/buildkit/session"
+	"github.com/moby/buildkit/solver/llbsolver"
+	"github.com/moby/buildkit/util/entitlements"
 	"github.com/moby/buildkit/util/tracing"
 	"github.com/moby/buildkit/util/tracing"
 	"github.com/pkg/errors"
 	"github.com/pkg/errors"
 	"golang.org/x/sync/errgroup"
 	"golang.org/x/sync/errgroup"
 	grpcmetadata "google.golang.org/grpc/metadata"
 	grpcmetadata "google.golang.org/grpc/metadata"
 )
 )
 
 
+func init() {
+	llbsolver.AllowNetworkHostUnstable = true
+}
+
 // Opt is option struct required for creating the builder
 // Opt is option struct required for creating the builder
 type Opt struct {
 type Opt struct {
 	SessionManager    *session.Manager
 	SessionManager    *session.Manager
@@ -230,6 +236,14 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
 		frontendAttrs["platform"] = opt.Options.Platform
 		frontendAttrs["platform"] = opt.Options.Platform
 	}
 	}
 
 
+	switch opt.Options.NetworkMode {
+	case "host", "none":
+		frontendAttrs["force-network-mode"] = opt.Options.NetworkMode
+	case "", "default":
+	default:
+		return nil, errors.Errorf("network mode %q not supported by buildkit", opt.Options.NetworkMode)
+	}
+
 	exporterAttrs := map[string]string{}
 	exporterAttrs := map[string]string{}
 
 
 	if len(opt.Options.Tags) > 0 {
 	if len(opt.Options.Tags) > 0 {
@@ -245,6 +259,10 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
 		Session:       opt.Options.SessionID,
 		Session:       opt.Options.SessionID,
 	}
 	}
 
 
+	if opt.Options.NetworkMode == "host" {
+		req.Entitlements = append(req.Entitlements, entitlements.EntitlementNetworkHost)
+	}
+
 	aux := streamformatter.AuxFormatter{Writer: opt.ProgressWriter.Output}
 	aux := streamformatter.AuxFormatter{Writer: opt.ProgressWriter.Output}
 
 
 	eg, ctx := errgroup.WithContext(ctx)
 	eg, ctx := errgroup.WithContext(ctx)