diff --git a/bake/compose.go b/bake/compose.go index c6eabcb31a4c..88516949e5fb 100644 --- a/bake/compose.go +++ b/bake/compose.go @@ -127,7 +127,12 @@ func ParseCompose(cfgs []composetypes.ConfigFile, envs map[string]string) (*Conf var ulimits []string if s.Build.Ulimits != nil { for n, u := range s.Build.Ulimits { - ulimit, err := units.ParseUlimit(fmt.Sprintf("%s=%d:%d", n, u.Soft, u.Hard)) + soft, hard := u.Soft, u.Hard + if u.Single != 0 { + // short syntax (e.g. "nproc: 65535") sets both limits + soft, hard = u.Single, u.Single + } + ulimit, err := units.ParseUlimit(fmt.Sprintf("%s=%d:%d", n, soft, hard)) if err != nil { return nil, err } diff --git a/bake/compose_test.go b/bake/compose_test.go index 3782e2eeaaec..4c306fb6b3c3 100644 --- a/bake/compose_test.go +++ b/bake/compose_test.go @@ -413,6 +413,25 @@ services: require.Equal(t, []string{"nofile=1024:1024"}, c.Targets[1].Ulimits) } +func TestComposeUlimitsSingleValue(t *testing.T) { + dt := []byte(` +services: + app: + build: + context: . + ulimits: + nproc: 65535 + nofile: + soft: 20000 + hard: 40000 +`) + + c, err := ParseCompose([]composetypes.ConfigFile{{Content: dt}}, nil) + require.NoError(t, err) + require.Len(t, c.Targets, 1) + require.ElementsMatch(t, []string{"nproc=65535:65535", "nofile=20000:40000"}, c.Targets[0].Ulimits) +} + func TestComposeExtDedup(t *testing.T) { dt := []byte(` services: