mirror of
https://github.com/containers/podman.git
synced 2025-12-04 04:09:40 +08:00
libpod: support for cgroup namespace
allow a container to run in a new cgroup namespace. When running in a new cgroup namespace, the current cgroup appears to be the root, so that there is no way for the container to access cgroups outside of its own subtree. By default it uses --cgroup=host to keep the previous behavior. To create a new namespace, --cgroup=private must be provided. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
@@ -129,6 +129,10 @@ func getCreateFlags(c *cliconfig.PodmanCommand) {
|
||||
"cap-drop", []string{},
|
||||
"Drop capabilities from the container",
|
||||
)
|
||||
createFlags.String(
|
||||
"cgroupns", "host",
|
||||
"cgroup namespace to use",
|
||||
)
|
||||
createFlags.String(
|
||||
"cgroup-parent", "",
|
||||
"Optional parent cgroup for the container",
|
||||
|
||||
@@ -400,11 +400,12 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod.
|
||||
namespaceNet = c.String("net")
|
||||
}
|
||||
namespaces = map[string]string{
|
||||
"pid": c.String("pid"),
|
||||
"net": namespaceNet,
|
||||
"ipc": c.String("ipc"),
|
||||
"user": c.String("userns"),
|
||||
"uts": c.String("uts"),
|
||||
"cgroup": c.String("cgroupns"),
|
||||
"pid": c.String("pid"),
|
||||
"net": namespaceNet,
|
||||
"ipc": c.String("ipc"),
|
||||
"user": c.String("userns"),
|
||||
"uts": c.String("uts"),
|
||||
}
|
||||
|
||||
originalPodName := c.String("pod")
|
||||
@@ -462,6 +463,11 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod.
|
||||
return nil, errors.Errorf("--uts %q is not valid", namespaces["uts"])
|
||||
}
|
||||
|
||||
cgroupMode := ns.CgroupMode(namespaces["cgroup"])
|
||||
if !cgroupMode.Valid() {
|
||||
return nil, errors.Errorf("--cgroup %q is not valid", namespaces["cgroup"])
|
||||
}
|
||||
|
||||
ipcMode := ns.IpcMode(namespaces["ipc"])
|
||||
if !cc.Valid(string(ipcMode), ipcMode) {
|
||||
return nil, errors.Errorf("--ipc %q is not valid", ipcMode)
|
||||
@@ -652,6 +658,7 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod.
|
||||
CapAdd: c.StringSlice("cap-add"),
|
||||
CapDrop: c.StringSlice("cap-drop"),
|
||||
CidFile: c.String("cidfile"),
|
||||
Cgroupns: c.String("cgroupns"),
|
||||
CgroupParent: c.String("cgroup-parent"),
|
||||
Command: command,
|
||||
Detach: c.Bool("detach"),
|
||||
@@ -687,6 +694,7 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod.
|
||||
NetMode: netMode,
|
||||
UtsMode: utsMode,
|
||||
PidMode: pidMode,
|
||||
CgroupMode: cgroupMode,
|
||||
Pod: podName,
|
||||
Privileged: c.Bool("privileged"),
|
||||
Publish: c.StringSlice("publish"),
|
||||
|
||||
@@ -370,6 +370,7 @@ func NewIntermediateLayer(c *cliconfig.PodmanCommand, remote bool) GenericCLIRes
|
||||
m["blkio-weight-device"] = newCRStringSlice(c, "blkio-weight-device")
|
||||
m["cap-add"] = newCRStringSlice(c, "cap-add")
|
||||
m["cap-drop"] = newCRStringSlice(c, "cap-drop")
|
||||
m["cgroupns"] = newCRString(c, "cgroupns")
|
||||
m["cgroup-parent"] = newCRString(c, "cgroup-parent")
|
||||
m["cidfile"] = newCRString(c, "cidfile")
|
||||
m["conmon-pidfile"] = newCRString(c, "conmon-pidfile")
|
||||
|
||||
Reference in New Issue
Block a user