Skip to content

Commit 5fef6b7

Browse files
Merge pull request #26116 from inknos/compat-post-containers-create-cgroupsnsmode
compat: Add CgroupnsMode to POST /containers/create
2 parents 3bf3d86 + b82f296 commit 5fef6b7

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

pkg/api/handlers/compat/containers.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,14 @@ func LibpodToContainerJSON(l *libpod.Container, sz bool) (*container.InspectResp
507507
}
508508
sort.Strings(hc.Binds)
509509

510+
// Map CgroupMode to CgroupnsMode for Docker API compatibility
511+
switch inspect.HostConfig.CgroupMode {
512+
case "private":
513+
hc.CgroupnsMode = container.CgroupnsModePrivate
514+
case "host":
515+
hc.CgroupnsMode = container.CgroupnsModeHost
516+
}
517+
510518
// k8s-file == json-file
511519
if hc.LogConfig.Type == define.KubernetesLogging {
512520
hc.LogConfig.Type = define.JSONLogging

pkg/api/handlers/compat/containers_create.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ func cliOpts(cc handlers.CreateContainerConfig, rtc *config.Config) (*entities.C
474474
User: cc.Config.User,
475475
UserNS: string(cc.HostConfig.UsernsMode),
476476
UTS: string(cc.HostConfig.UTSMode),
477+
CgroupNS: string(cc.HostConfig.CgroupnsMode),
477478
Mount: mounts,
478479
VolumesFrom: cc.HostConfig.VolumesFrom,
479480
Workdir: cc.Config.WorkingDir,

test/apiv2/python/rest_api/test_v2_0_0_container.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,32 @@ def test_host_config_port_bindings(self):
458458
self.assertTrue("8080/tcp" in inspect_response["HostConfig"]["PortBindings"])
459459
self.assertFalse("8081/tcp" in inspect_response["HostConfig"]["PortBindings"])
460460

461+
def test_host_config_cgroupns_mode(self):
462+
for mode in ["private", "host"]:
463+
r = requests.post(
464+
self.podman_url + "/v1.40/containers/create",
465+
json={
466+
"Name": "cgroupns_" + mode,
467+
"Cmd": ["top"],
468+
"Image": "alpine:latest",
469+
"HostConfig": {
470+
"CgroupnsMode": mode
471+
}
472+
},
473+
)
474+
self.assertEqual(r.status_code, 201, r.text)
475+
payload = r.json()
476+
container_id = payload["Id"]
477+
self.assertIsNotNone(container_id)
478+
479+
r = requests.get(self.podman_url + f"/v1.40/containers/{container_id}/json")
480+
self.assertEqual(r.status_code, 200, r.text)
481+
inspect_response = r.json()
482+
self.assertEqual(mode, inspect_response["HostConfig"]["CgroupnsMode"])
483+
484+
r = requests.delete(self.podman_url + f"/v1.40/containers/{container_id}")
485+
self.assertEqual(r.status_code, 204, r.text)
486+
461487
def execute_process(cmd):
462488
return subprocess.run(
463489
cmd,

0 commit comments

Comments
 (0)