From cf688d27b25a1f093df7625b654f6db0441b5cb2 Mon Sep 17 00:00:00 2001 From: Khushiyant Date: Sun, 2 Mar 2025 00:17:51 +0530 Subject: [PATCH] feat: add cgroup to host config--according to api docs (closes#2340) Signed-off-by: Khushiyant fix: unexpected keyword argument Signed-off-by: Khushiyant --- docker/models/containers.py | 1 + docker/types/containers.py | 6 +++++- tests/unit/api_container_test.py | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docker/models/containers.py b/docker/models/containers.py index 9c9e92c90..40aaf08b6 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -570,6 +570,7 @@ def run(self, image, command=None, stdout=True, stderr=False, ``["SYS_ADMIN", "MKNOD"]``. cap_drop (list of str): Drop kernel capabilities. cgroup_parent (str): Override the default parent cgroup. + cgroup (str): Cgroup to use for the container. cgroupns (str): Override the default cgroup namespace mode for the container. One of: - ``private`` the container runs in its own private cgroup diff --git a/docker/types/containers.py b/docker/types/containers.py index 598188a25..13bf16af9 100644 --- a/docker/types/containers.py +++ b/docker/types/containers.py @@ -284,7 +284,7 @@ def __init__(self, version, binds=None, port_bindings=None, nano_cpus=None, cpuset_mems=None, runtime=None, mounts=None, cpu_rt_period=None, cpu_rt_runtime=None, device_cgroup_rules=None, device_requests=None, - cgroupns=None): + cgroupns=None, cgroup=None): if mem_limit is not None: self['Memory'] = parse_bytes(mem_limit) @@ -424,6 +424,10 @@ def __init__(self, version, binds=None, port_bindings=None, if cgroup_parent is not None: self['CgroupParent'] = cgroup_parent + if cgroup is not None: + if isinstance(cgroup, str): + self['Cgroup'] = cgroup + if ulimits is not None: if not isinstance(ulimits, list): raise host_config_type_error('ulimits', ulimits, 'list') diff --git a/tests/unit/api_container_test.py b/tests/unit/api_container_test.py index b2e5237a2..45ecce490 100644 --- a/tests/unit/api_container_test.py +++ b/tests/unit/api_container_test.py @@ -306,6 +306,20 @@ def test_create_container_with_cgroup_parent(self): assert 'CgroupParent' in data['HostConfig'] assert data['HostConfig']['CgroupParent'] == 'test' + def test_create_container_with_cgroup(self): + self.client.create_container( + 'busybox', 'ls', host_config=self.client.create_host_config( + cgroup='host' + ) + ) + + args = fake_request.call_args + assert args[0][1] == url_prefix + 'containers/create' + data = json.loads(args[1]['data']) + assert 'HostConfig' in data + assert 'Cgroup' in data['HostConfig'] + assert data['HostConfig']['Cgroup'] == 'host' + def test_create_container_with_working_dir(self): self.client.create_container('busybox', 'ls', working_dir='/root')