Signed-off-by: Anda Xu <anda.xu@docker.com>
| ... | ... |
@@ -50,10 +50,11 @@ func init() {
|
| 50 | 50 |
|
| 51 | 51 |
// Opt is option struct required for creating the builder |
| 52 | 52 |
type Opt struct {
|
| 53 |
- SessionManager *session.Manager |
|
| 54 |
- Root string |
|
| 55 |
- Dist images.DistributionServices |
|
| 56 |
- NetworkController libnetwork.NetworkController |
|
| 53 |
+ SessionManager *session.Manager |
|
| 54 |
+ Root string |
|
| 55 |
+ Dist images.DistributionServices |
|
| 56 |
+ NetworkController libnetwork.NetworkController |
|
| 57 |
+ DefaultCgroupParent string |
|
| 57 | 58 |
} |
| 58 | 59 |
|
| 59 | 60 |
// Builder can build using BuildKit backend |
| ... | ... |
@@ -102,7 +102,7 @@ func newController(rt http.RoundTripper, opt Opt) (*control.Controller, error) {
|
| 102 | 102 |
return nil, err |
| 103 | 103 |
} |
| 104 | 104 |
|
| 105 |
- exec, err := newExecutor(root, opt.NetworkController) |
|
| 105 |
+ exec, err := newExecutor(root, opt.DefaultCgroupParent, opt.NetworkController) |
|
| 106 | 106 |
if err != nil {
|
| 107 | 107 |
return nil, err |
| 108 | 108 |
} |
| ... | ... |
@@ -19,15 +19,16 @@ import ( |
| 19 | 19 |
|
| 20 | 20 |
const networkName = "bridge" |
| 21 | 21 |
|
| 22 |
-func newExecutor(root string, net libnetwork.NetworkController) (executor.Executor, error) {
|
|
| 22 |
+func newExecutor(root, cgroupParent string, net libnetwork.NetworkController) (executor.Executor, error) {
|
|
| 23 | 23 |
networkProviders := map[pb.NetMode]network.Provider{
|
| 24 | 24 |
pb.NetMode_UNSET: &bridgeProvider{NetworkController: net},
|
| 25 | 25 |
pb.NetMode_HOST: network.NewHostProvider(), |
| 26 | 26 |
pb.NetMode_NONE: network.NewNoneProvider(), |
| 27 | 27 |
} |
| 28 | 28 |
return runcexecutor.New(runcexecutor.Opt{
|
| 29 |
- Root: filepath.Join(root, "executor"), |
|
| 30 |
- CommandCandidates: []string{"docker-runc", "runc"},
|
|
| 29 |
+ Root: filepath.Join(root, "executor"), |
|
| 30 |
+ CommandCandidates: []string{"docker-runc", "runc"},
|
|
| 31 |
+ DefaultCgroupParent: cgroupParent, |
|
| 31 | 32 |
}, networkProviders) |
| 32 | 33 |
} |
| 33 | 34 |
|
| ... | ... |
@@ -284,11 +284,23 @@ func newRouterOptions(config *config.Config, daemon *daemon.Daemon) (routerOptio |
| 284 | 284 |
if err != nil {
|
| 285 | 285 |
return opts, err |
| 286 | 286 |
} |
| 287 |
+ cgroupParent := "docker" |
|
| 288 |
+ useSystemd := daemon.UsingSystemd(config) |
|
| 289 |
+ if useSystemd {
|
|
| 290 |
+ cgroupParent = "system.slice" |
|
| 291 |
+ } |
|
| 292 |
+ if config.CgroupParent != "" {
|
|
| 293 |
+ cgroupParent = config.CgroupParent |
|
| 294 |
+ } |
|
| 295 |
+ if useSystemd {
|
|
| 296 |
+ cgroupParent = cgroupParent + ":" + "docker" + ":" |
|
| 297 |
+ } |
|
| 287 | 298 |
bk, err := buildkit.New(buildkit.Opt{
|
| 288 |
- SessionManager: sm, |
|
| 289 |
- Root: filepath.Join(config.Root, "buildkit"), |
|
| 290 |
- Dist: daemon.DistributionServices(), |
|
| 291 |
- NetworkController: daemon.NetworkController(), |
|
| 299 |
+ SessionManager: sm, |
|
| 300 |
+ Root: filepath.Join(config.Root, "buildkit"), |
|
| 301 |
+ Dist: daemon.DistributionServices(), |
|
| 302 |
+ NetworkController: daemon.NetworkController(), |
|
| 303 |
+ DefaultCgroupParent: cgroupParent, |
|
| 292 | 304 |
}) |
| 293 | 305 |
if err != nil {
|
| 294 | 306 |
return opts, err |