From 8e5595b7c79bac3fc1073869a647e358df56a7ba Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 19 Oct 2021 21:05:52 +0200 Subject: [PATCH] build: add shm-size support Signed-off-by: CrazyMax --- build/build.go | 6 ++++++ commands/build.go | 5 +++-- docs/reference/buildx_build.md | 7 +++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/build/build.go b/build/build.go index 81c66c4d02f..1bdbddbdc83 100644 --- a/build/build.go +++ b/build/build.go @@ -57,6 +57,7 @@ type Options struct { ImageIDFile string ExtraHosts []string NetworkMode string + ShmSize opts.MemBytes Ulimits *opts.UlimitOpt NoCache bool @@ -556,6 +557,11 @@ func toSolveOpt(ctx context.Context, d driver.Driver, multiDriver bool, opt Opti } so.FrontendAttrs["add-hosts"] = extraHosts + // setup shm size + if opt.ShmSize.Value() > 0 { + so.FrontendAttrs["shm-size"] = strconv.FormatInt(opt.ShmSize.Value(), 10) + } + // setup ulimits ulimits, err := toBuildkitUlimits(opt.Ulimits) if err != nil { diff --git a/commands/build.go b/commands/build.go index 38f060acb6b..e224404d687 100644 --- a/commands/build.go +++ b/commands/build.go @@ -47,6 +47,7 @@ type buildOptions struct { extraHosts []string networkMode string quiet bool + shmSize opts.MemBytes ulimits *opts.UlimitOpt // unimplemented @@ -127,6 +128,7 @@ func runBuild(dockerCli command.Cli, in buildOptions) (err error) { ImageIDFile: in.imageIDFile, ExtraHosts: in.extraHosts, NetworkMode: in.networkMode, + ShmSize: in.shmSize, Ulimits: in.ulimits, } @@ -313,6 +315,7 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags.StringSliceVar(&options.extraHosts, "add-host", []string{}, "Add a custom host-to-IP mapping (format: `host:ip`)") flags.SetAnnotation("add-host", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host"}) flags.StringVar(&options.imageIDFile, "iidfile", "", "Write the image ID to the file") + flags.Var(&options.shmSize, "shm-size", "Size of `/dev/shm`") flags.Var(options.ulimits, "ulimit", "Ulimit options") // not implemented @@ -332,8 +335,6 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags.MarkHidden("memory") flags.StringVar(&ignore, "memory-swap", "", "Swap limit equal to memory plus swap: `-1` to enable unlimited swap") flags.MarkHidden("memory-swap") - flags.StringVar(&ignore, "shm-size", "", "Size of `/dev/shm`") - flags.MarkHidden("shm-size") flags.Int64VarP(&ignoreInt, "cpu-shares", "c", 0, "CPU shares (relative weight)") flags.MarkHidden("cpu-shares") flags.Int64Var(&ignoreInt, "cpu-period", 0, "Limit the CPU CFS (Completely Fair Scheduler) period") diff --git a/docs/reference/buildx_build.md b/docs/reference/buildx_build.md index c8242f9ea59..6290e52a272 100644 --- a/docs/reference/buildx_build.md +++ b/docs/reference/buildx_build.md @@ -35,6 +35,7 @@ Start a build | [`--push`](#push) | Shorthand for `--output=type=registry` | | `-q`, `--quiet` | Suppress the build output and print image ID on success | | `--secret stringArray` | Secret file to expose to the build (format: `id=mysecret,src=/local/secret`) | +| [`--shm-size bytes`](#shm-size) | Size of `/dev/shm` | | `--ssh stringArray` | SSH agent socket or keys to expose to the build (format: `default\|[=\|[,]]`) | | [`-t`](https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t), [`--tag stringArray`](https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t) | Name and optionally a tag (format: `name:tag`) | | [`--target string`](https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target) | Set the target build stage to build. | @@ -319,6 +320,12 @@ $ docker buildx create --use --name insecure-builder --buildkitd-flags '--allow- $ docker buildx build --allow security.insecure . ``` +### Size of `/dev/shm` (--shm-size) + +The format is ``. `number` must be greater than `0`. Unit is +optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), or `g` +(gigabytes). If you omit the unit, the system uses bytes. + ### Set ulimits (--ulimit) `--ulimit` is specified with a soft and hard limit as such: