浏览代码

builder: enable shm-size and ulimit for buildkit

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
CrazyMax 3 年之前
父节点
当前提交
b899db6423
共有 1 个文件被更改,包括 24 次插入0 次删除
  1. 24 0
      builder/builder-next/builder.go

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

@@ -20,6 +20,7 @@ import (
 	"github.com/docker/docker/libnetwork"
 	"github.com/docker/docker/pkg/idtools"
 	"github.com/docker/docker/pkg/streamformatter"
+	"github.com/docker/go-units"
 	controlapi "github.com/moby/buildkit/api/services/control"
 	"github.com/moby/buildkit/client"
 	"github.com/moby/buildkit/control"
@@ -319,6 +320,17 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
 	}
 	frontendAttrs["add-hosts"] = extraHosts
 
+	if opt.Options.ShmSize > 0 {
+		frontendAttrs["shm-size"] = strconv.FormatInt(opt.Options.ShmSize, 10)
+	}
+
+	ulimits, err := toBuildkitUlimits(opt.Options.Ulimits)
+	if err != nil {
+		return nil, err
+	} else if len(ulimits) > 0 {
+		frontendAttrs["ulimit"] = ulimits
+	}
+
 	exporterName := ""
 	exporterAttrs := map[string]string{}
 
@@ -558,6 +570,18 @@ func toBuildkitExtraHosts(inp []string) (string, error) {
 	return strings.Join(hosts, ","), nil
 }
 
+// toBuildkitUlimits converts ulimits from docker type=soft:hard format to buildkit's csv format
+func toBuildkitUlimits(inp []*units.Ulimit) (string, error) {
+	if len(inp) == 0 {
+		return "", nil
+	}
+	ulimits := make([]string, 0, len(inp))
+	for _, ulimit := range inp {
+		ulimits = append(ulimits, ulimit.String())
+	}
+	return strings.Join(ulimits, ","), nil
+}
+
 func toBuildkitPruneInfo(opts types.BuildCachePruneOptions) (client.PruneInfo, error) {
 	var until time.Duration
 	untilValues := opts.Filters.Get("until")          // canonical