diff --git a/builder/builder-next/builder.go b/builder/builder-next/builder.go index 0016d9e8ea..7bd93c05fc 100644 --- a/builder/builder-next/builder.go +++ b/builder/builder-next/builder.go @@ -50,10 +50,11 @@ func init() { // Opt is option struct required for creating the builder type Opt struct { - SessionManager *session.Manager - Root string - Dist images.DistributionServices - NetworkController libnetwork.NetworkController + SessionManager *session.Manager + Root string + Dist images.DistributionServices + NetworkController libnetwork.NetworkController + DefaultCgroupParent string } // Builder can build using BuildKit backend diff --git a/builder/builder-next/controller.go b/builder/builder-next/controller.go index f50dea315a..808b0b884f 100644 --- a/builder/builder-next/controller.go +++ b/builder/builder-next/controller.go @@ -102,7 +102,7 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) { return nil, err } - exec, err := newExecutor(root, opt.NetworkController) + exec, err := newExecutor(root, opt.DefaultCgroupParent, opt.NetworkController) if err != nil { return nil, err } diff --git a/builder/builder-next/executor_unix.go b/builder/builder-next/executor_unix.go index 808889a0af..94d8bb7660 100644 --- a/builder/builder-next/executor_unix.go +++ b/builder/builder-next/executor_unix.go @@ -19,15 +19,16 @@ import ( const networkName = "bridge" -func newExecutor(root string, net libnetwork.NetworkController) (executor.Executor, error) { +func newExecutor(root, cgroupParent string, net libnetwork.NetworkController) (executor.Executor, error) { networkProviders := map[pb.NetMode]network.Provider{ pb.NetMode_UNSET: &bridgeProvider{NetworkController: net}, pb.NetMode_HOST: network.NewHostProvider(), pb.NetMode_NONE: network.NewNoneProvider(), } return runcexecutor.New(runcexecutor.Opt{ - Root: filepath.Join(root, "executor"), - CommandCandidates: []string{"docker-runc", "runc"}, + Root: filepath.Join(root, "executor"), + CommandCandidates: []string{"docker-runc", "runc"}, + DefaultCgroupParent: cgroupParent, }, networkProviders) } diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go index b46ee08121..678d849963 100644 --- a/cmd/dockerd/daemon.go +++ b/cmd/dockerd/daemon.go @@ -284,11 +284,23 @@ func newRouterOptions(config *config.Config, daemon *daemon.Daemon) (routerOptio if err != nil { return opts, err } + cgroupParent := "docker" + useSystemd := daemon.UsingSystemd(config) + if useSystemd { + cgroupParent = "system.slice" + } + if config.CgroupParent != "" { + cgroupParent = config.CgroupParent + } + if useSystemd { + cgroupParent = cgroupParent + ":" + "docker" + ":" + } bk, err := buildkit.New(buildkit.Opt{ - SessionManager: sm, - Root: filepath.Join(config.Root, "buildkit"), - Dist: daemon.DistributionServices(), - NetworkController: daemon.NetworkController(), + SessionManager: sm, + Root: filepath.Join(config.Root, "buildkit"), + Dist: daemon.DistributionServices(), + NetworkController: daemon.NetworkController(), + DefaultCgroupParent: cgroupParent, }) if err != nil { return opts, err