From 3e8c16ef6d5e6b451996722d99f5d646ed8a0e56 Mon Sep 17 00:00:00 2001 From: Sainath Grandhi Date: Tue, 7 Jun 2016 18:40:44 -0700 Subject: [PATCH] docker rename fix to address the issue of renaming with the same name issue #23319 Signed-off-by: Sainath Grandhi --- daemon/rename.go | 9 +++++++++ integration-cli/docker_cli_rename_test.go | 13 +++++++++++++ 2 files changed, 22 insertions(+) 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)) +}