diff --git a/docker.go b/docker.go index 8a79e989a9..7f9442306a 100644 --- a/docker.go +++ b/docker.go @@ -67,10 +67,14 @@ func (docker *Docker) Destroy(container *Container) error { if err := container.Stop(); err != nil { return err } - if err := os.RemoveAll(container.Root); err != nil { - return err + if container.Filesystem.IsMounted() { + if err := container.Filesystem.Umount(); err != nil { + log.Printf("Unable to umount container %v: %v", container.Id, err) + } + } + if err := os.RemoveAll(container.Root); err != nil { + log.Printf("Unable to remove filesystem for %v: %v", container.Id, err) } - docker.containers.Remove(element) return nil } diff --git a/filesystem.go b/filesystem.go index 3a16bd6983..1e4679fc04 100644 --- a/filesystem.go +++ b/filesystem.go @@ -58,6 +58,8 @@ func (fs *Filesystem) Umount() error { if fs.IsMounted() { return fmt.Errorf("Umount: Filesystem still mounted after calling umount(%v)", fs.RootFS) } + // Even though we just unmounted the filesystem, AUFS will prevent deleting the mntpoint + // for some time. We'll just keep retrying until it succeeds. for retries := 0; retries < 1000; retries++ { err := os.Remove(fs.RootFS) if err == nil {