From e6f2e7646c813e8225b0bc16d3a0c13c76a9cd97 Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Tue, 14 Jun 2016 12:40:35 -0700 Subject: [PATCH] Remove symlinks on layer removal for overlay2 Symlinks are currently not getting cleaned up when removing layers since only the root directory is removed. On remove, read the link file and remove the associated link from the link directory. Signed-off-by: Derek McGowan (github: dmcgowan) --- daemon/graphdriver/overlay2/overlay.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/daemon/graphdriver/overlay2/overlay.go b/daemon/graphdriver/overlay2/overlay.go index 603a8ff8ec..af0a536120 100644 --- a/daemon/graphdriver/overlay2/overlay.go +++ b/daemon/graphdriver/overlay2/overlay.go @@ -340,7 +340,15 @@ func (d *Driver) getLowerDirs(id string) ([]string, error) { // Remove cleans the directories that are created for this id. func (d *Driver) Remove(id string) error { - if err := os.RemoveAll(d.dir(id)); err != nil && !os.IsNotExist(err) { + dir := d.dir(id) + lid, err := ioutil.ReadFile(path.Join(dir, "link")) + if err == nil { + if err := os.RemoveAll(path.Join(d.home, linkDir, string(lid))); err != nil { + logrus.Debugf("Failed to remove link: %v", err) + } + } + + if err := os.RemoveAll(dir); err != nil && !os.IsNotExist(err) { return err } return nil