Setting up the mounts on the host increases chances of mount leakage and makes for more cleanup after the plugin has stopped. With this change all mounts for the plugin are performed by the container runtime and automatically cleaned up when the container exits. Signed-off-by: Brian Goff <cpuguy83@gmail.com> Upstream-commit: a53930a04fa81b082aa78e66b342ff19cc63cc5f Component: engine
34 lines
1014 B
Go
34 lines
1014 B
Go
package graphdriver
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/docker/docker/pkg/plugingetter"
|
|
"github.com/docker/docker/plugin/v2"
|
|
)
|
|
|
|
func lookupPlugin(name string, pg plugingetter.PluginGetter, config Options) (Driver, error) {
|
|
if !config.ExperimentalEnabled {
|
|
return nil, fmt.Errorf("graphdriver plugins are only supported with experimental mode")
|
|
}
|
|
pl, err := pg.Get(name, "GraphDriver", plugingetter.Acquire)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error looking up graphdriver plugin %s: %v", name, err)
|
|
}
|
|
return newPluginDriver(name, pl, config)
|
|
}
|
|
|
|
func newPluginDriver(name string, pl plugingetter.CompatPlugin, config Options) (Driver, error) {
|
|
home := config.Root
|
|
if !pl.IsV1() {
|
|
if p, ok := pl.(*v2.Plugin); ok {
|
|
if p.PluginObj.Config.PropagatedMount != "" {
|
|
home = p.PluginObj.Config.PropagatedMount
|
|
}
|
|
}
|
|
}
|
|
proxy := &graphDriverProxy{name, pl, Capabilities{}}
|
|
return proxy, proxy.Init(filepath.Join(home, name), config.DriverOptions, config.UIDMaps, config.GIDMaps)
|
|
}
|