diff --git a/drivers/overlay/overlay.go b/drivers/overlay/overlay.go index d6abb7628c..15b343d156 100644 --- a/drivers/overlay/overlay.go +++ b/drivers/overlay/overlay.go @@ -1479,9 +1479,11 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO } mergedDir := path.Join(dir, "merged") - // Create the driver merged dir - if err := idtools.MkdirAs(mergedDir, 0700, rootUID, rootGID); err != nil && !os.IsExist(err) { - return "", err + // Attempt to create the merged dir only if it doesn't exist. + if _, err := os.Stat(mergedDir); err != nil && os.IsNotExist(err) { + if err := idtools.MkdirAs(mergedDir, 0o700, rootUID, rootGID); err != nil && !os.IsExist(err) { + return "", err + } } if count := d.ctr.Increment(mergedDir); count > 1 { return mergedDir, nil @@ -1639,7 +1641,7 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO // Put unmounts the mount path created for the give id. func (d *Driver) Put(id string) error { - dir, _, inAdditionalStore := d.dir2(id) + dir, inAdditionalStore := d.dir2(id) if _, err := os.Stat(dir); err != nil { return err } diff --git a/tests/overlay-recreate.bats b/tests/overlay-recreate.bats index 038a48810a..c3ebbb3297 100644 --- a/tests/overlay-recreate.bats +++ b/tests/overlay-recreate.bats @@ -18,7 +18,8 @@ load helpers storage unmount "$lowerlayer" storage mount "$midlayer" storage unmount "$midlayer" - storage mount "$upperlayer" + run storage --debug=false mount "$upperlayer" + merged_dir="$output" storage unmount "$upperlayer" # okay, but how about this? rm -v ${TESTDIR}/root/overlay/*/link @@ -27,6 +28,8 @@ load helpers storage unmount "$lowerlayer" storage mount "$midlayer" storage unmount "$midlayer" + # check it works if we delete the merged directory. + rmdir "$merged_dir" storage mount "$upperlayer" storage unmount "$upperlayer" # okay, not bad, kid.