Browse code

Make sure plugin mounts are cleaned up

Signed-off-by: Brian Goff <cpuguy83@gmail.com>

Brian Goff authored on 2017/12/19 11:28:16
Showing 2 changed files
... ...
@@ -19,6 +19,7 @@ import (
19 19
 	"github.com/docker/docker/layer"
20 20
 	"github.com/docker/docker/pkg/authorization"
21 21
 	"github.com/docker/docker/pkg/ioutils"
22
+	"github.com/docker/docker/pkg/mount"
22 23
 	"github.com/docker/docker/pkg/pubsub"
23 24
 	"github.com/docker/docker/pkg/system"
24 25
 	"github.com/docker/docker/plugin/v2"
... ...
@@ -155,6 +156,10 @@ func (pm *Manager) HandleExitEvent(id string) error {
155 155
 
156 156
 	if restart {
157 157
 		pm.enable(p, c, true)
158
+	} else {
159
+		if err := mount.RecursiveUnmount(filepath.Join(pm.config.Root, id)); err != nil {
160
+			return errors.Wrap(err, "error cleaning up plugin mounts")
161
+		}
158 162
 	}
159 163
 	return nil
160 164
 }
... ...
@@ -187,6 +187,9 @@ func (pm *Manager) Shutdown() {
187 187
 			shutdownPlugin(p, c, pm.executor)
188 188
 		}
189 189
 	}
190
+	if err := mount.RecursiveUnmount(pm.config.Root); err != nil {
191
+		logrus.WithError(err).Warn("error cleaning up plugin mounts")
192
+	}
190 193
 }
191 194
 
192 195
 func (pm *Manager) upgradePlugin(p *v2.Plugin, configDigest digest.Digest, blobsums []digest.Digest, tmpRootFSDir string, privileges *types.PluginPrivileges) (err error) {