From 14554f495ca39899e355354fb369e20edaf6d778 Mon Sep 17 00:00:00 2001 From: Yang Pengfei Date: Tue, 4 Jul 2017 23:35:58 +0800 Subject: [PATCH] Fix run `docker rename new_name` concurrently, the container will have multi names When run `docker rename new_name` concurrently, every operation will release container's old name. So container will have multi new names reserve in nameIndex. Signed-off-by: Yang Pengfei Upstream-commit: cc2340689c431504689d01c9516b3a340b2e8dbc Component: engine --- components/engine/daemon/rename.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/engine/daemon/rename.go b/components/engine/daemon/rename.go index ad21593c19..2a8d0b22c7 100644 --- a/components/engine/daemon/rename.go +++ b/components/engine/daemon/rename.go @@ -32,6 +32,9 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error { return err } + container.Lock() + defer container.Unlock() + oldName = container.Name oldIsAnonymousEndpoint := container.NetworkSettings.IsAnonymousEndpoint @@ -39,9 +42,6 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error { return errors.New("Renaming a container with the same name as its current name") } - container.Lock() - defer container.Unlock() - links := map[string]*dockercontainer.Container{} for k, v := range daemon.linkIndex.children(container) { if !strings.HasPrefix(k, oldName) {