diff --git a/cmd/containerd/config.go b/cmd/containerd/config.go index 9964813..65e4018 100644 --- a/cmd/containerd/config.go +++ b/cmd/containerd/config.go @@ -44,6 +44,8 @@ type config struct { Snapshotter string `toml:"snapshotter"` // Plugins provides plugin specific configuration for the initialization of a plugin Plugins map[string]toml.Primitive `toml:"plugins"` + // Enable containerd as a subreaper + Subreaper bool `toml:"subreaper"` md toml.MetaData } diff --git a/cmd/containerd/main.go b/cmd/containerd/main.go index ebce5a4..2c5b3e9 100644 --- a/cmd/containerd/main.go +++ b/cmd/containerd/main.go @@ -23,6 +23,7 @@ import ( "github.com/docker/containerd/plugin" "github.com/docker/containerd/reaper" "github.com/docker/containerd/snapshot" + "github.com/docker/containerd/sys" "github.com/docker/containerd/utils" metrics "github.com/docker/go-metrics" "github.com/pkg/errors" @@ -85,6 +86,12 @@ func main() { // we don't miss any signals during boot signals := make(chan os.Signal, 2048) signal.Notify(signals, syscall.SIGTERM, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGCHLD) + if conf.Subreaper { + log.G(global).Info("setting subreaper...") + if err := sys.SetSubreaper(1); err != nil { + return err + } + } log.G(global).Info("starting containerd boot...") // load all plugins into containerd