diff --git a/builder/dockerfile/builder.go b/builder/dockerfile/builder.go index 3215a25e15..69d1e7df4b 100644 --- a/builder/dockerfile/builder.go +++ b/builder/dockerfile/builder.go @@ -196,28 +196,28 @@ func (b *Builder) build(stdout io.Writer, stderr io.Writer, out io.Writer) (stri return "", err } - shortImageID, err := b.dispatchDockerfileWithCancellation(dockerfile) + imageID, err := b.dispatchDockerfileWithCancellation(dockerfile) if err != nil { return "", err } b.warnOnUnusedBuildArgs() - if b.image == "" { + if imageID == "" { return "", errors.New("No image was generated. Is your Dockerfile empty?") } if b.options.Squash { - if err := b.squashBuild(); err != nil { + if imageID, err = b.squashBuild(imageID); err != nil { return "", err } } - fmt.Fprintf(b.Stdout, "Successfully built %s\n", shortImageID) - if err := b.tagImages(repoAndTags); err != nil { + fmt.Fprintf(b.Stdout, "Successfully built %s\n", stringid.TruncateID(imageID)) + if err := b.tagImages(imageID, repoAndTags); err != nil { return "", err } - return b.image, nil + return imageID, nil } func (b *Builder) dispatchDockerfileWithCancellation(dockerfile *parser.Result) (string, error) { @@ -225,7 +225,7 @@ func (b *Builder) dispatchDockerfileWithCancellation(dockerfile *parser.Result) b.escapeToken = dockerfile.EscapeToken total := len(dockerfile.AST.Children) - var shortImgID string + var imageID string for i, n := range dockerfile.AST.Children { select { case <-b.clientCtx.Done(): @@ -247,8 +247,10 @@ func (b *Builder) dispatchDockerfileWithCancellation(dockerfile *parser.Result) return "", err } - shortImgID = stringid.TruncateID(b.image) - fmt.Fprintf(b.Stdout, " ---> %s\n", shortImgID) + // TODO: get this from dispatch + imageID = b.image + + fmt.Fprintf(b.Stdout, " ---> %s\n", stringid.TruncateID(imageID)) if b.options.Remove { b.clearTmp() } @@ -258,20 +260,20 @@ func (b *Builder) dispatchDockerfileWithCancellation(dockerfile *parser.Result) return "", errors.Errorf("failed to reach build target %s in Dockerfile", b.options.Target) } - return shortImgID, nil + return imageID, nil } -func (b *Builder) squashBuild() error { +func (b *Builder) squashBuild(imageID string) (string, error) { var fromID string var err error if b.from != nil { fromID = b.from.ImageID() } - b.image, err = b.docker.SquashImage(b.image, fromID) + imageID, err = b.docker.SquashImage(imageID, fromID) if err != nil { - return errors.Wrap(err, "error squashing image") + return "", errors.Wrap(err, "error squashing image") } - return nil + return imageID, nil } func addNodesForLabelOption(dockerfile *parser.Node, labels map[string]string) { @@ -292,8 +294,8 @@ func (b *Builder) warnOnUnusedBuildArgs() { } } -func (b *Builder) tagImages(repoAndTags []reference.Named) error { - imageID := image.ID(b.image) +func (b *Builder) tagImages(id string, repoAndTags []reference.Named) error { + imageID := image.ID(id) for _, rt := range repoAndTags { if err := b.docker.TagImageWithReference(imageID, rt); err != nil { return err diff --git a/builder/dockerfile/dispatchers.go b/builder/dockerfile/dispatchers.go index 6ca11f2a8a..8d2ed44aad 100644 --- a/builder/dockerfile/dispatchers.go +++ b/builder/dockerfile/dispatchers.go @@ -314,7 +314,6 @@ func workdir(req dispatchRequest) error { // We've already updated the runConfig and that's enough. return nil } - req.runConfig.Image = req.builder.image cmd := req.runConfig.Cmd comment := "WORKDIR " + req.runConfig.WorkingDir diff --git a/builder/dockerfile/dispatchers_test.go b/builder/dockerfile/dispatchers_test.go index c1d4ed0dff..32c71d3508 100644 --- a/builder/dockerfile/dispatchers_test.go +++ b/builder/dockerfile/dispatchers_test.go @@ -9,10 +9,10 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/builder" + "github.com/docker/docker/pkg/testutil" "github.com/docker/go-connections/nat" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/docker/docker/pkg/testutil" ) type commandWithFunction struct { diff --git a/builder/dockerfile/evaluator.go b/builder/dockerfile/evaluator.go index f6776be3fb..f6c8b4df4a 100644 --- a/builder/dockerfile/evaluator.go +++ b/builder/dockerfile/evaluator.go @@ -20,9 +20,9 @@ package dockerfile import ( + "bytes" "fmt" "strings" - "bytes" "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder/dockerfile/command"