diff --git a/components/engine/builder/builder-next/builder.go b/components/engine/builder/builder-next/builder.go index aff43f6fbd..7bd93c05fc 100644 --- a/components/engine/builder/builder-next/builder.go +++ b/components/engine/builder/builder-next/builder.go @@ -50,11 +50,11 @@ func init() { // Opt is option struct required for creating the builder type Opt struct { - SessionManager *session.Manager - Root string - NetnsRoot 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/components/engine/builder/builder-next/controller.go b/components/engine/builder/builder-next/controller.go index df0f3d48e5..808b0b884f 100644 --- a/components/engine/builder/builder-next/controller.go +++ b/components/engine/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.NetnsRoot, opt.NetworkController) + exec, err := newExecutor(root, opt.DefaultCgroupParent, opt.NetworkController) if err != nil { return nil, err } diff --git a/components/engine/builder/builder-next/executor_unix.go b/components/engine/builder/builder-next/executor_unix.go index f72a27fb0a..5bfa411324 100644 --- a/components/engine/builder/builder-next/executor_unix.go +++ b/components/engine/builder/builder-next/executor_unix.go @@ -19,15 +19,16 @@ import ( const networkName = "bridge" -func newExecutor(root, netnsRoot 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, netnsRoot: netnsRoot}, 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/components/engine/cmd/dockerd/daemon.go b/components/engine/cmd/dockerd/daemon.go index 8c347456a0..fd280149f0 100644 --- a/components/engine/cmd/dockerd/daemon.go +++ b/components/engine/cmd/dockerd/daemon.go @@ -284,12 +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"), - NetnsRoot: filepath.Join(config.ExecRoot, "netns"), - 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