When run `docker rename <container-id> 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 <yangpengfei4@huawei.com>
| ... | ... |
@@ -32,6 +32,9 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error {
|
| 32 | 32 |
return err |
| 33 | 33 |
} |
| 34 | 34 |
|
| 35 |
+ container.Lock() |
|
| 36 |
+ defer container.Unlock() |
|
| 37 |
+ |
|
| 35 | 38 |
oldName = container.Name |
| 36 | 39 |
oldIsAnonymousEndpoint := container.NetworkSettings.IsAnonymousEndpoint |
| 37 | 40 |
|
| ... | ... |
@@ -39,9 +42,6 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error {
|
| 39 | 39 |
return errors.New("Renaming a container with the same name as its current name")
|
| 40 | 40 |
} |
| 41 | 41 |
|
| 42 |
- container.Lock() |
|
| 43 |
- defer container.Unlock() |
|
| 44 |
- |
|
| 45 | 42 |
links := map[string]*dockercontainer.Container{}
|
| 46 | 43 |
for k, v := range daemon.linkIndex.children(container) {
|
| 47 | 44 |
if !strings.HasPrefix(k, oldName) {
|