diff --git a/daemon/rename.go b/daemon/rename.go index 3973dd5bfd..f921accbc9 100644 --- a/daemon/rename.go +++ b/daemon/rename.go @@ -21,6 +21,10 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error { return fmt.Errorf("Neither old nor new names may be empty") } + if newName[0] != '/' { + newName = "/" + newName + } + container, err := daemon.GetContainer(oldName) if err != nil { return err @@ -31,6 +35,11 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error { container.Lock() defer container.Unlock() + + if oldName == newName { + return fmt.Errorf("Renaming a container with the same name as its current name") + } + if newName, err = daemon.reserveName(container.ID, newName); err != nil { return fmt.Errorf("Error when allocating new name: %v", err) } diff --git a/integration-cli/docker_cli_rename_test.go b/integration-cli/docker_cli_rename_test.go index 74389a2ac7..669a09aa3d 100644 --- a/integration-cli/docker_cli_rename_test.go +++ b/integration-cli/docker_cli_rename_test.go @@ -108,3 +108,16 @@ func (s *DockerSuite) TestRenameAnonymousContainer(c *check.C) { _, _, err := dockerCmdWithError("run", "--net", "network1", "busybox", "ping", count, "1", "container1") c.Assert(err, check.IsNil, check.Commentf("Embedded DNS lookup fails after renaming anonymous container: %v", err)) } + +func (s *DockerSuite) TestRenameContainerWithSameName(c *check.C) { + out, _ := runSleepingContainer(c, "--name", "old") + ContainerID := strings.TrimSpace(out) + + out, _, err := dockerCmdWithError("rename", "old", "old") + c.Assert(err, checker.NotNil, check.Commentf("Renaming a container with the same name should have failed")) + c.Assert(out, checker.Contains, "Renaming a container with the same name", check.Commentf("%v", err)) + + out, _, err = dockerCmdWithError("rename", ContainerID, "old") + c.Assert(err, checker.NotNil, check.Commentf("Renaming a container with the same name should have failed")) + c.Assert(out, checker.Contains, "Renaming a container with the same name", check.Commentf("%v", err)) +}