diff --git a/daemon/create.go b/daemon/create.go index 36d1f3c0e9..5f1b631791 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -90,7 +90,7 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig, managed bool) ( } defer func() { if retErr != nil { - if err := daemon.cleanupContainer(container, true); err != nil { + if err := daemon.cleanupContainer(container, true, true); err != nil { logrus.Errorf("failed to cleanup container on create error: %v", err) } } @@ -118,13 +118,6 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig, managed bool) ( if err := daemon.setHostConfig(container, params.HostConfig); err != nil { return nil, err } - defer func() { - if retErr != nil { - if err := daemon.removeMountPoints(container, true); err != nil { - logrus.Error(err) - } - } - }() if err := daemon.createContainerPlatformSpecificSettings(container, params.Config, params.HostConfig); err != nil { return nil, err diff --git a/daemon/delete.go b/daemon/delete.go index ec9d5c5f18..a143cd0dc7 100644 --- a/daemon/delete.go +++ b/daemon/delete.go @@ -39,14 +39,7 @@ func (daemon *Daemon) ContainerRm(name string, config *types.ContainerRmConfig) return daemon.rmLink(container, name) } - err = daemon.cleanupContainer(container, config.ForceRemove) - if err == nil || config.ForceRemove { - if e := daemon.removeMountPoints(container, config.RemoveVolume); e != nil { - logrus.Error(e) - } - } - - return err + return daemon.cleanupContainer(container, config.ForceRemove, config.RemoveVolume) } func (daemon *Daemon) rmLink(container *container.Container, name string) error { @@ -77,7 +70,7 @@ func (daemon *Daemon) rmLink(container *container.Container, name string) error // cleanupContainer unregisters a container from the daemon, stops stats // collection and cleanly removes contents and metadata from the filesystem. -func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemove bool) (err error) { +func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemove, removeVolume bool) (err error) { if container.IsRunning() { if !forceRemove { err := fmt.Errorf("You cannot remove a running container %s. Stop the container before attempting removal or use -f", container.ID) @@ -115,6 +108,9 @@ func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemo selinuxFreeLxcContexts(container.ProcessLabel) daemon.idIndex.Delete(container.ID) daemon.containers.Delete(container.ID) + if e := daemon.removeMountPoints(container, removeVolume); e != nil { + logrus.Error(e) + } daemon.LogContainerEvent(container, "destroy") } }()