From 6fed46aeb97943315aed12f2dc62565f7bcc53dc Mon Sep 17 00:00:00 2001 From: Aaron Lehmann Date: Fri, 12 Feb 2016 09:08:45 -0800 Subject: [PATCH] Pass authentication credentials through to build In Docker 1.10 and earlier, "docker build" can do a build FROM a private repository that hasn't yet been pulled. This doesn't work on master. I bisected this to https://github.com/docker/docker/pull/19414. AuthConfigs is deserialized from the HTTP request, but not included in the builder options. Signed-off-by: Aaron Lehmann --- api/server/router/build/build_routes.go | 2 ++ integration-cli/docker_cli_build_test.go | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/api/server/router/build/build_routes.go b/api/server/router/build/build_routes.go index 904a21664b..acc116b994 100644 --- a/api/server/router/build/build_routes.go +++ b/api/server/router/build/build_routes.go @@ -159,6 +159,8 @@ func (br *buildRouter) postBuild(ctx context.Context, w http.ResponseWriter, r * buildOptions.Dockerfile = dockerfileName } + buildOptions.AuthConfigs = authConfigs + out = output if buildOptions.SuppressOutput { out = notVerboseBuffer diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index 15df05f191..308da6c6ff 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -6534,3 +6534,26 @@ func (s *DockerSuite) TestBuildWorkdirWindowsPath(c *check.C) { c.Fatal(err) } } + +func (s *DockerRegistryAuthSuite) TestBuildFromAuthenticatedRegistry(c *check.C) { + dockerCmd(c, "login", "-u", s.reg.username, "-p", s.reg.password, "-e", s.reg.email, privateRegistryURL) + + baseImage := privateRegistryURL + "/baseimage" + + _, err := buildImage(baseImage, ` + FROM busybox + ENV env1 val1 + `, true) + + c.Assert(err, checker.IsNil) + + dockerCmd(c, "push", baseImage) + dockerCmd(c, "rmi", baseImage) + + _, err = buildImage(baseImage, fmt.Sprintf(` + FROM %s + ENV env2 val2 + `, baseImage), true) + + c.Assert(err, checker.IsNil) +}