moby--moby/builder/dockerfile
Sebastiaan van Stijn 915b239519
builder: produce error when using unsupported Dockerfile option
With the promotion of the experimental Dockerfile syntax to "stable", the Dockerfile
syntax now includes some options that are supported by BuildKit, but not (yet)
supported in the classic builder.

As a result, parsing a Dockerfile may succeed, but any flag that's known to BuildKit,
but not supported by the classic builder is silently ignored;

    $ mkdir buildkit_flags && cd buildkit_flags
    $ touch foo.txt

For example, `RUN --mount`:

    DOCKER_BUILDKIT=0 docker build --no-cache -f- . <<EOF
    FROM busybox
    RUN --mount=type=cache,target=/foo echo hello
    EOF

    Sending build context to Docker daemon  2.095kB
    Step 1/2 : FROM busybox
     ---> 219ee5171f80
    Step 2/2 : RUN --mount=type=cache,target=/foo echo hello
     ---> Running in 022fdb856bc8
    hello
    Removing intermediate container 022fdb856bc8
     ---> e9f0988844d1
    Successfully built e9f0988844d1

Or `COPY --chmod` (same for `ADD --chmod`):

    DOCKER_BUILDKIT=0 docker build --no-cache -f- . <<EOF
    FROM busybox
    COPY --chmod=0777 /foo.txt /foo.txt
    EOF

    Sending build context to Docker daemon  2.095kB
    Step 1/2 : FROM busybox
     ---> 219ee5171f80
    Step 2/2 : COPY --chmod=0777 /foo.txt /foo.txt
     ---> 8b7117932a2a
    Successfully built 8b7117932a2a

Note that unknown flags still produce and error, for example, the below fails because `--hello` is an unknown flag;

    DOCKER_BUILDKIT=0 docker build -<<EOF
    FROM busybox
    RUN --hello echo hello
    EOF

    Sending build context to Docker daemon  2.048kB
    Error response from daemon: dockerfile parse error line 2: Unknown flag: hello

With this patch applied
----------------------------

With this patch applied, flags that are known in the Dockerfile spec, but are not
supported by the classic builder, produce an error, which includes a link to the
documentation how to enable BuildKit:

    DOCKER_BUILDKIT=0 docker build --no-cache -f- . <<EOF
    FROM busybox
    RUN --mount=type=cache,target=/foo echo hello
    EOF

    Sending build context to Docker daemon  2.048kB
    Step 1/2 : FROM busybox
     ---> b97242f89c8a
    Step 2/2 : RUN --mount=type=cache,target=/foo echo hello
    the --mount option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled

    DOCKER_BUILDKIT=0 docker build --no-cache -f- . <<EOF
    FROM busybox
    COPY --chmod=0777 /foo.txt /foo.txt
    EOF

    Sending build context to Docker daemon  2.095kB
    Step 1/2 : FROM busybox
     ---> b97242f89c8a
    Step 2/2 : COPY --chmod=0777 /foo.txt /foo.txt
    the --chmod option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit a09c0276a2)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-24 23:57:54 +01:00
..
buildargs.go fix typos 2018-09-01 21:26:38 +08:00
buildargs_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
builder.go vendor buildkit 6861f17f15364de0fe1fd1e6e8da07598a485123 2020-11-14 03:57:36 +00:00
builder_unix.go Add canonical import comment 2018-02-05 16:51:57 -05:00
builder_windows.go Add canonical import comment 2018-02-05 16:51:57 -05:00
containerbackend.go Test: Add buffer to two channels to avoid blocking goroutine 2020-08-27 18:53:43 -04:00
copy.go Builder: print relative path if COPY/ADD source path was not found 2020-08-17 12:03:18 +02:00
copy_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
copy_unix.go builder/copy-unix: fix filepath.Walk args 2019-09-18 12:57:18 +02:00
copy_windows.go Replace uses of blacklist/whitelist 2020-07-14 10:41:34 +02:00
dispatchers.go builder: produce error when using unsupported Dockerfile option 2021-03-24 23:57:54 +01:00
dispatchers_test.go builder: produce error when using unsupported Dockerfile option 2021-03-24 23:57:54 +01:00
dispatchers_unix.go Windows: (WCOW) Generate OCI spec that remote runtime can escape 2019-03-12 18:41:55 -07:00
dispatchers_unix_test.go Add canonical import comment 2018-02-05 16:51:57 -05:00
dispatchers_windows.go Windows: (WCOW) Generate OCI spec that remote runtime can escape 2019-03-12 18:41:55 -07:00
dispatchers_windows_test.go Add canonical import comment 2018-02-05 16:51:57 -05:00
evaluator.go vendor: use dockerfile parser from buildkit 2018-06-02 11:10:34 -07:00
evaluator_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
imagecontext.go Add variant to image.Image and legacy builder 2019-09-24 22:18:16 +00:00
imagecontext_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
imageprobe.go Add canonical import comment 2018-02-05 16:51:57 -05:00
internals.go Add variant to image.Image and legacy builder 2019-09-24 22:18:16 +00:00
internals_linux.go replace pkg/symlink with github.com/moby/sys/symlink 2020-11-03 11:17:12 +01:00
internals_linux_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
internals_test.go builder/remotecontext: use lowercase for error 2020-08-11 10:46:18 +02:00
internals_windows.go Use newer x/sys/windows SecurityAttributes struct 2019-10-02 21:12:23 +02:00
internals_windows_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
metrics.go goimports: fix imports 2019-09-18 12:56:54 +02:00
mockbackend_test.go builder/dockerfile/mockbackend_test.go: suppress SA9005 (staticcheck) 2019-10-18 00:45:27 +02:00
utils_test.go Add canonical import comment 2018-02-05 16:51:57 -05:00