Merge pull request #26116 from inknos/compat-post-containers-create-cgroupsnsmode

compat: Add CgroupnsMode to POST /containers/create
This commit is contained in:
openshift-merge-bot[bot]
2025-05-15 18:20:38 +00:00
committed by GitHub
3 changed files with 35 additions and 0 deletions

View File

@ -507,6 +507,14 @@ func LibpodToContainerJSON(l *libpod.Container, sz bool) (*container.InspectResp
}
sort.Strings(hc.Binds)
// Map CgroupMode to CgroupnsMode for Docker API compatibility
switch inspect.HostConfig.CgroupMode {
case "private":
hc.CgroupnsMode = container.CgroupnsModePrivate
case "host":
hc.CgroupnsMode = container.CgroupnsModeHost
}
// k8s-file == json-file
if hc.LogConfig.Type == define.KubernetesLogging {
hc.LogConfig.Type = define.JSONLogging

View File

@ -474,6 +474,7 @@ func cliOpts(cc handlers.CreateContainerConfig, rtc *config.Config) (*entities.C
User: cc.Config.User,
UserNS: string(cc.HostConfig.UsernsMode),
UTS: string(cc.HostConfig.UTSMode),
CgroupNS: string(cc.HostConfig.CgroupnsMode),
Mount: mounts,
VolumesFrom: cc.HostConfig.VolumesFrom,
Workdir: cc.Config.WorkingDir,

View File

@ -458,6 +458,32 @@ class ContainerTestCase(APITestCase):
self.assertTrue("8080/tcp" in inspect_response["HostConfig"]["PortBindings"])
self.assertFalse("8081/tcp" in inspect_response["HostConfig"]["PortBindings"])
def test_host_config_cgroupns_mode(self):
for mode in ["private", "host"]:
r = requests.post(
self.podman_url + "/v1.40/containers/create",
json={
"Name": "cgroupns_" + mode,
"Cmd": ["top"],
"Image": "alpine:latest",
"HostConfig": {
"CgroupnsMode": mode
}
},
)
self.assertEqual(r.status_code, 201, r.text)
payload = r.json()
container_id = payload["Id"]
self.assertIsNotNone(container_id)
r = requests.get(self.podman_url + f"/v1.40/containers/{container_id}/json")
self.assertEqual(r.status_code, 200, r.text)
inspect_response = r.json()
self.assertEqual(mode, inspect_response["HostConfig"]["CgroupnsMode"])
r = requests.delete(self.podman_url + f"/v1.40/containers/{container_id}")
self.assertEqual(r.status_code, 204, r.text)
def execute_process(cmd):
return subprocess.run(
cmd,