diff --git a/builder/docker/driver_docker.go b/builder/docker/driver_docker.go index a537ab2ec..53a62832c 100644 --- a/builder/docker/driver_docker.go +++ b/builder/docker/driver_docker.go @@ -275,8 +275,34 @@ func (d *DockerDriver) StopContainer(id string) error { func (d *DockerDriver) TagImage(id string, repo string, force bool) error { args := []string{"tag"} + + // detect running docker version before tagging + // flag `force` for docker tagging was removed after Docker 1.12.0 + // to keep its backward compatibility, we are not going to remove `force` + // option, but to ignore it when Docker version >= 1.12.0 + // + // for more detail, please refer to the following links: + // - https://docs.docker.com/engine/deprecated/#/f-flag-on-docker-tag + // - https://github.com/docker/docker/pull/23090 + version_running, err := d.Version() + if err != nil { + return err + } + + version_deprecated, err := version.NewVersion(string("1.12.0")) + if err != nil { + // should never reach this line + return err + } + if force { - args = append(args, "-f") + if version_running.LessThan(version_deprecated) { + args = append(args, "-f") + } else { + // do nothing if Docker version >= 1.12.0 + log.Printf("[WARN] option: \"force\" will be ignored here") + log.Printf("since it was removed after Docker 1.12.0 released") + } } args = append(args, id, repo) diff --git a/website/source/docs/post-processors/docker-tag.html.md b/website/source/docs/post-processors/docker-tag.html.md index ea9fccad1..777f1cc5a 100644 --- a/website/source/docs/post-processors/docker-tag.html.md +++ b/website/source/docs/post-processors/docker-tag.html.md @@ -33,6 +33,8 @@ repository is required. - `force` (boolean) - If true, this post-processor forcibly tag the image even if tag name is collided. Default to `false`. + But it will be ignored if Docker >= 1.12.0 was detected, + since the `force` option was removed after 1.12.0. [reference](https://docs.docker.com/engine/deprecated/#/f-flag-on-docker-tag) ## Example