|
@@ -38,8 +38,36 @@ func (e invalidIsolationError) Error() string {
|
|
func (e invalidIsolationError) InvalidParameter() {}
|
|
func (e invalidIsolationError) InvalidParameter() {}
|
|
|
|
|
|
func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBuildOptions, error) {
|
|
func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBuildOptions, error) {
|
|
|
|
+ options := &types.ImageBuildOptions{
|
|
|
|
+ Version: types.BuilderV1, // Builder V1 is the default, but can be overridden
|
|
|
|
+ Dockerfile: r.FormValue("dockerfile"),
|
|
|
|
+ SuppressOutput: httputils.BoolValue(r, "q"),
|
|
|
|
+ NoCache: httputils.BoolValue(r, "nocache"),
|
|
|
|
+ ForceRemove: httputils.BoolValue(r, "forcerm"),
|
|
|
|
+ MemorySwap: httputils.Int64ValueOrZero(r, "memswap"),
|
|
|
|
+ Memory: httputils.Int64ValueOrZero(r, "memory"),
|
|
|
|
+ CPUShares: httputils.Int64ValueOrZero(r, "cpushares"),
|
|
|
|
+ CPUPeriod: httputils.Int64ValueOrZero(r, "cpuperiod"),
|
|
|
|
+ CPUQuota: httputils.Int64ValueOrZero(r, "cpuquota"),
|
|
|
|
+ CPUSetCPUs: r.FormValue("cpusetcpus"),
|
|
|
|
+ CPUSetMems: r.FormValue("cpusetmems"),
|
|
|
|
+ CgroupParent: r.FormValue("cgroupparent"),
|
|
|
|
+ NetworkMode: r.FormValue("networkmode"),
|
|
|
|
+ Tags: r.Form["t"],
|
|
|
|
+ ExtraHosts: r.Form["extrahosts"],
|
|
|
|
+ SecurityOpt: r.Form["securityopt"],
|
|
|
|
+ Squash: httputils.BoolValue(r, "squash"),
|
|
|
|
+ Target: r.FormValue("target"),
|
|
|
|
+ RemoteContext: r.FormValue("remote"),
|
|
|
|
+ SessionID: r.FormValue("session"),
|
|
|
|
+ BuildID: r.FormValue("buildid"),
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if runtime.GOOS != "windows" && options.SecurityOpt != nil {
|
|
|
|
+ return nil, errdefs.InvalidParameter(errors.New("The daemon on this platform does not support setting security options on build"))
|
|
|
|
+ }
|
|
|
|
+
|
|
version := httputils.VersionFromContext(ctx)
|
|
version := httputils.VersionFromContext(ctx)
|
|
- options := &types.ImageBuildOptions{}
|
|
|
|
if httputils.BoolValue(r, "forcerm") && versions.GreaterThanOrEqualTo(version, "1.12") {
|
|
if httputils.BoolValue(r, "forcerm") && versions.GreaterThanOrEqualTo(version, "1.12") {
|
|
options.Remove = true
|
|
options.Remove = true
|
|
} else if r.FormValue("rm") == "" && versions.GreaterThanOrEqualTo(version, "1.12") {
|
|
} else if r.FormValue("rm") == "" && versions.GreaterThanOrEqualTo(version, "1.12") {
|
|
@@ -50,30 +78,19 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
|
|
if httputils.BoolValue(r, "pull") && versions.GreaterThanOrEqualTo(version, "1.16") {
|
|
if httputils.BoolValue(r, "pull") && versions.GreaterThanOrEqualTo(version, "1.16") {
|
|
options.PullParent = true
|
|
options.PullParent = true
|
|
}
|
|
}
|
|
-
|
|
|
|
- options.Version = types.BuilderV1 // Builder V1 is the default, but can be overridden
|
|
|
|
- options.Dockerfile = r.FormValue("dockerfile")
|
|
|
|
- options.SuppressOutput = httputils.BoolValue(r, "q")
|
|
|
|
- options.NoCache = httputils.BoolValue(r, "nocache")
|
|
|
|
- options.ForceRemove = httputils.BoolValue(r, "forcerm")
|
|
|
|
- options.MemorySwap = httputils.Int64ValueOrZero(r, "memswap")
|
|
|
|
- options.Memory = httputils.Int64ValueOrZero(r, "memory")
|
|
|
|
- options.CPUShares = httputils.Int64ValueOrZero(r, "cpushares")
|
|
|
|
- options.CPUPeriod = httputils.Int64ValueOrZero(r, "cpuperiod")
|
|
|
|
- options.CPUQuota = httputils.Int64ValueOrZero(r, "cpuquota")
|
|
|
|
- options.CPUSetCPUs = r.FormValue("cpusetcpus")
|
|
|
|
- options.CPUSetMems = r.FormValue("cpusetmems")
|
|
|
|
- options.CgroupParent = r.FormValue("cgroupparent")
|
|
|
|
- options.NetworkMode = r.FormValue("networkmode")
|
|
|
|
- options.Tags = r.Form["t"]
|
|
|
|
- options.ExtraHosts = r.Form["extrahosts"]
|
|
|
|
- options.SecurityOpt = r.Form["securityopt"]
|
|
|
|
- options.Squash = httputils.BoolValue(r, "squash")
|
|
|
|
- options.Target = r.FormValue("target")
|
|
|
|
- options.RemoteContext = r.FormValue("remote")
|
|
|
|
if versions.GreaterThanOrEqualTo(version, "1.32") {
|
|
if versions.GreaterThanOrEqualTo(version, "1.32") {
|
|
options.Platform = r.FormValue("platform")
|
|
options.Platform = r.FormValue("platform")
|
|
}
|
|
}
|
|
|
|
+ if versions.GreaterThanOrEqualTo(version, "1.40") {
|
|
|
|
+ outputsJSON := r.FormValue("outputs")
|
|
|
|
+ if outputsJSON != "" {
|
|
|
|
+ var outputs []types.ImageBuildOutput
|
|
|
|
+ if err := json.Unmarshal([]byte(outputsJSON), &outputs); err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ options.Outputs = outputs
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
if s := r.Form.Get("shmsize"); s != "" {
|
|
if s := r.Form.Get("shmsize"); s != "" {
|
|
shmSize, err := strconv.ParseInt(s, 10, 64)
|
|
shmSize, err := strconv.ParseInt(s, 10, 64)
|
|
@@ -90,10 +107,6 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if runtime.GOOS != "windows" && options.SecurityOpt != nil {
|
|
|
|
- return nil, errdefs.InvalidParameter(errors.New("The daemon on this platform does not support setting security options on build"))
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if ulimitsJSON := r.FormValue("ulimits"); ulimitsJSON != "" {
|
|
if ulimitsJSON := r.FormValue("ulimits"); ulimitsJSON != "" {
|
|
var buildUlimits = []*units.Ulimit{}
|
|
var buildUlimits = []*units.Ulimit{}
|
|
if err := json.Unmarshal([]byte(ulimitsJSON), &buildUlimits); err != nil {
|
|
if err := json.Unmarshal([]byte(ulimitsJSON), &buildUlimits); err != nil {
|
|
@@ -137,8 +150,6 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
|
|
}
|
|
}
|
|
options.CacheFrom = cacheFrom
|
|
options.CacheFrom = cacheFrom
|
|
}
|
|
}
|
|
- options.SessionID = r.FormValue("session")
|
|
|
|
- options.BuildID = r.FormValue("buildid")
|
|
|
|
|
|
|
|
if bv := r.FormValue("version"); bv != "" {
|
|
if bv := r.FormValue("version"); bv != "" {
|
|
v, err := parseVersion(bv)
|
|
v, err := parseVersion(bv)
|
|
@@ -148,31 +159,17 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
|
|
options.Version = v
|
|
options.Version = v
|
|
}
|
|
}
|
|
|
|
|
|
- if versions.GreaterThanOrEqualTo(version, "1.40") {
|
|
|
|
- outputsJSON := r.FormValue("outputs")
|
|
|
|
- if outputsJSON != "" {
|
|
|
|
- var outputs []types.ImageBuildOutput
|
|
|
|
- if err := json.Unmarshal([]byte(outputsJSON), &outputs); err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
- options.Outputs = outputs
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return options, nil
|
|
return options, nil
|
|
}
|
|
}
|
|
|
|
|
|
func parseVersion(s string) (types.BuilderVersion, error) {
|
|
func parseVersion(s string) (types.BuilderVersion, error) {
|
|
- if s == "" {
|
|
|
|
- return types.BuilderV1, nil
|
|
|
|
- }
|
|
|
|
switch types.BuilderVersion(s) {
|
|
switch types.BuilderVersion(s) {
|
|
case types.BuilderV1:
|
|
case types.BuilderV1:
|
|
return types.BuilderV1, nil
|
|
return types.BuilderV1, nil
|
|
case types.BuilderBuildKit:
|
|
case types.BuilderBuildKit:
|
|
return types.BuilderBuildKit, nil
|
|
return types.BuilderBuildKit, nil
|
|
default:
|
|
default:
|
|
- return "", errors.Errorf("invalid version %s", s)
|
|
|
|
|
|
+ return "", errors.Errorf("invalid version %q", s)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|