The Docker CLI
Go to file
Sebastiaan van Stijn 847aef321e
build: fix AddDockerfileToBuildContext not de-referencing tar header template
Commit 73aef6edfe
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>
2021-08-10 23:19:14 +02:00
.circleci GitHub Actions for lint 2021-08-05 08:44:21 +02:00
.github GitHub Actions for lint 2021-08-05 08:44:21 +02:00
cli build: fix AddDockerfileToBuildContext not de-referencing tar header template 2021-08-10 23:19:14 +02:00
cli-plugins Use golang.org/x/sys/execabs 2021-01-26 17:18:04 +00:00
cmd/docker config: print deprecation warning when falling back to ~/.dockercfg 2021-03-08 16:13:02 +01:00
contrib/completion Detect compose plugin 2021-07-19 12:02:34 -03:00
dockerfiles Update Go to 1.16.7 2021-08-07 18:20:39 +02:00
docs docs/yaml: add TODO for conditionally skipping root command 2021-07-30 20:51:09 +02:00
e2e change TestNewAPIClientFromFlagsWithHttpProxyEnv to an e2e test 2021-07-28 22:33:12 +02:00
experimental docs: remove experimental ipvlan docs, as they were migrated 2021-04-24 13:33:30 +02:00
internal/test Fix container creation time in test/builders 2020-12-16 08:55:29 +07:00
kubernetes Always enable experimental features 2020-10-02 15:59:42 +02:00
man Add support for ALL_PROXY 2021-07-21 09:06:18 +02:00
opts Use net.JoinHostPort() to fix formatting with IPv6 addresses 2021-04-20 11:05:24 +02:00
scripts Merge pull request #3211 from crazy-max/gha 2021-08-05 14:11:23 +02:00
service/logs bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
templates bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
vendor vendor: github.com/containerd/containerd v1.5.5 2021-08-10 12:14:25 +02:00
.dockerignore dockerfile based binary building 2021-04-06 00:20:21 -07:00
.gitignore update windows resources generation 2021-04-06 00:20:59 -07:00
.golangci.yml Remove now obsolete gometalinter and use golangci-lint instead 2019-10-31 19:22:44 +01:00
.mailmap Update authors and mailmap 2020-08-06 01:58:32 +02:00
AUTHORS Update authors and mailmap 2020-08-06 01:58:32 +02:00
CONTRIBUTING.md Fix broken link in CONTRIBUTING 2020-03-19 15:03:59 +01:00
Dockerfile Update Go to 1.16.7 2021-08-07 18:20:39 +02:00
Jenkinsfile Jenkinsfile: update old engine version to 19.03 2021-06-15 13:34:28 +02:00
LICENSE Add project files 2017-04-17 17:49:33 -04:00
MAINTAINERS Maintainers: remove Justin and Aaron 2019-12-04 13:08:15 +01:00
Makefile GitHub Actions for lint 2021-08-05 08:44:21 +02:00
NOTICE switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
README.md update readme with new examples 2021-04-06 00:21:10 -07:00
TESTING.md Update TESTING.md to replace testify by gotest.tools 2018-07-02 09:24:28 +02:00
VERSION Update version to 20.10-dev 2020-10-13 09:37:17 +02:00
appveyor.yml Update Go to 1.16.7 2021-08-07 18:20:39 +02:00
codecov.yml Fix PR comments 2018-01-03 10:23:32 +01:00
docker-bake.hcl GitHub Actions for lint 2021-08-05 08:44:21 +02:00
docker.Makefile GitHub Actions for lint 2021-08-05 08:44:21 +02:00
poule.yml Add github templates and initial poule configuration 2017-05-09 16:57:46 +02:00
vendor.conf vendor: github.com/containerd/containerd v1.5.5 2021-08-10 12:14:25 +02:00

README.md

build status Build Status

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.