github.com/lmars/docker@v1.6.0-rc2/daemon/rename.go (about) 1 package daemon 2 3 import "github.com/docker/docker/engine" 4 5 func (daemon *Daemon) ContainerRename(job *engine.Job) engine.Status { 6 if len(job.Args) != 2 { 7 return job.Errorf("usage: %s OLD_NAME NEW_NAME", job.Name) 8 } 9 oldName := job.Args[0] 10 newName := job.Args[1] 11 12 container, err := daemon.Get(oldName) 13 if err != nil { 14 return job.Error(err) 15 } 16 17 oldName = container.Name 18 19 container.Lock() 20 defer container.Unlock() 21 if newName, err = daemon.reserveName(container.ID, newName); err != nil { 22 return job.Errorf("Error when allocating new name: %s", err) 23 } 24 25 container.Name = newName 26 27 undo := func() { 28 container.Name = oldName 29 daemon.reserveName(container.ID, oldName) 30 daemon.containerGraph.Delete(newName) 31 } 32 33 if err := daemon.containerGraph.Delete(oldName); err != nil { 34 undo() 35 return job.Errorf("Failed to delete container %q: %v", oldName, err) 36 } 37 38 if err := container.toDisk(); err != nil { 39 undo() 40 return job.Error(err) 41 } 42 43 return engine.StatusOK 44 }