Commit https://github.com/docker/docker/commit/73aef6edfe5ae533f9cf547f924c98a9b0f7be59 modified archive.ReplaceFileTarWrapper to set the Name field in the tar header, if the field was not set. That change exposed an issue in how a Dockerfile from stdin was sent to the daemon. When attempting to build using a build-context, and a Dockerfile from stdin, the following happened: ```bash mkdir build-stdin && cd build-stdin && echo hello > hello.txt DOCKER_BUILDKIT=0 docker build --no-cache -t foo -f- . <<'EOF' FROM alpine COPY . . EOF Sending build context to Docker daemon 2.607kB Error response from daemon: dockerfile parse error line 1: unknown instruction: .DOCKERIGNORE ``` Removing the `-t foo`, oddly lead to a different failure: ```bash DOCKER_BUILDKIT=0 docker build --no-cache -f- . <<'EOF' FROM alpine COPY . . EOF Sending build context to Docker daemon 2.581kB Error response from daemon: Cannot locate specified Dockerfile: .dockerfile.701d0d71fb1497d6a7ce ``` From the above, it looks like the tar headers got mangled, causing (in the first case) the daemon to use the build-context tar as a plain-text file, and therefore parsing it as Dockerfile, and in the second case, causing it to not being able to find the Dockerfile in the context. I noticed that both TarModifierFuncs were using the same `hdrTmpl` struct, which looks to caused them to step on each other's toes. Changing them to each initialize their own struct made the issue go away. After this change: ```bash DOCKER_BUILDKIT=0 docker build --no-cache -t foo -f- . <<'EOF' FROM alpine COPY . . EOF Sending build context to Docker daemon 2.607kB Step 1/2 : FROM alpine ---> d4ff818577bc Step 2/2 : COPY . . ---> 556f745e6938 Successfully built 556f745e6938 Successfully tagged foo:latest DOCKER_BUILDKIT=0 docker build --no-cache -f- . <<'EOF' FROM alpine COPY . . EOF Sending build context to Docker daemon 2.607kB Step 1/2 : FROM alpine ---> d4ff818577bc Step 2/2 : COPY . . ---> aaaee43bec5e Successfully built aaaee43bec5e ``` Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
docker/cli
This repository is the home of the cli used in the Docker CE and Docker EE products.
Development
docker/cli is developed using Docker.
Build CLI from source:
$ docker buildx bake
Build binaries for all supported platforms:
$ docker buildx bake cross
Build for a specific platform:
$ docker buildx bake --set binary.platform=linux/arm64
Build dynamic binary for glibc or musl:
$ USE_GLIBC=1 docker buildx bake dynbinary
Run all linting:
$ make -f docker.Makefile lint
List all the available targets:
$ make help
In-container development environment
Start an interactive development environment:
$ make -f docker.Makefile shell
Legal
Brought to you courtesy of our legal counsel. For more context, please see the NOTICE document in this repo.
Use and transfer of Docker may be subject to certain restrictions by the United States and other governments.
It is your responsibility to ensure that your use and/or transfer does not violate applicable laws.
For more information, please see https://www.bis.doc.gov
Licensing
docker/cli is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.