Skip to content

Commit 29dee5a

Browse files
mtszbshin-
authored andcommitted
Add support for uts_mode parameter in Client.create_host_config.
This parameter allows to set the UTS namespace of the container, as in the `--uts=X` Docker CLI parameter: <https://docs.docker.com/engine/reference/run/#uts-settings---uts> The only allowed value, if set, is "host". Signed-off-by: Marco Trillo <[email protected]> Signed-off-by: Diego Alvarez <[email protected]>
1 parent 1e389b7 commit 29dee5a

File tree

6 files changed

+31
-5
lines changed

6 files changed

+31
-5
lines changed

docker/api/container.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,8 @@ def create_host_config(self, *args, **kwargs):
547547
userns_mode (str): Sets the user namespace mode for the container
548548
when user namespace remapping option is enabled. Supported
549549
values are: ``host``
550+
uts_mode (str): Sets the UTS namespace mode for the container.
551+
Supported values are: ``host``
550552
volumes_from (:py:class:`list`): List of container names or IDs to
551553
get volumes from.
552554
runtime (str): Runtime to use with this container.

docker/models/containers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,7 @@ def prune(self, filters=None):
995995
'tmpfs',
996996
'ulimits',
997997
'userns_mode',
998+
'uts_mode',
998999
'version',
9991000
'volumes_from',
10001001
'runtime'

docker/types/containers.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,11 @@ def __init__(self, version, binds=None, port_bindings=None,
115115
device_read_iops=None, device_write_iops=None,
116116
oom_kill_disable=False, shm_size=None, sysctls=None,
117117
tmpfs=None, oom_score_adj=None, dns_opt=None, cpu_shares=None,
118-
cpuset_cpus=None, userns_mode=None, pids_limit=None,
119-
isolation=None, auto_remove=False, storage_opt=None,
120-
init=None, init_path=None, volume_driver=None,
121-
cpu_count=None, cpu_percent=None, nano_cpus=None,
122-
cpuset_mems=None, runtime=None, mounts=None,
118+
cpuset_cpus=None, userns_mode=None, uts_mode=None,
119+
pids_limit=None, isolation=None, auto_remove=False,
120+
storage_opt=None, init=None, init_path=None,
121+
volume_driver=None, cpu_count=None, cpu_percent=None,
122+
nano_cpus=None, cpuset_mems=None, runtime=None, mounts=None,
123123
cpu_rt_period=None, cpu_rt_runtime=None,
124124
device_cgroup_rules=None):
125125

@@ -392,6 +392,11 @@ def __init__(self, version, binds=None, port_bindings=None,
392392
raise host_config_value_error("userns_mode", userns_mode)
393393
self['UsernsMode'] = userns_mode
394394

395+
if uts_mode:
396+
if uts_mode != "host":
397+
raise host_config_value_error("uts_mode", uts_mode)
398+
self['UTSMode'] = uts_mode
399+
395400
if pids_limit:
396401
if not isinstance(pids_limit, int):
397402
raise host_config_type_error('pids_limit', pids_limit, 'int')

tests/integration/api_container_test.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,16 @@ def test_create_with_device_cgroup_rules(self):
490490
self.client.start(ctnr)
491491
assert rule in self.client.logs(ctnr).decode('utf-8')
492492

493+
def test_create_with_uts_mode(self):
494+
container = self.client.create_container(
495+
BUSYBOX, ['echo'], host_config=self.client.create_host_config(
496+
uts_mode='host'
497+
)
498+
)
499+
self.tmp_containers.append(container)
500+
config = self.client.inspect_container(container)
501+
assert config['HostConfig']['UTSMode'] == 'host'
502+
493503

494504
@pytest.mark.xfail(
495505
IS_WINDOWS_PLATFORM, reason='Test not designed for Windows platform'

tests/unit/dockertypes_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ def test_create_host_config_with_userns_mode(self):
8585
with pytest.raises(ValueError):
8686
create_host_config(version='1.23', userns_mode='host12')
8787

88+
def test_create_host_config_with_uts(self):
89+
config = create_host_config(version='1.15', uts_mode='host')
90+
assert config.get('UTSMode') == 'host'
91+
with pytest.raises(ValueError):
92+
create_host_config(version='1.15', uts_mode='host12')
93+
8894
def test_create_host_config_with_oom_score_adj(self):
8995
config = create_host_config(version='1.22', oom_score_adj=100)
9096
assert config.get('OomScoreAdj') == 100

tests/unit/models_containers_test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ def test_create_container_args(self):
9595
ulimits=[{"Name": "nofile", "Soft": 1024, "Hard": 2048}],
9696
user='bob',
9797
userns_mode='host',
98+
uts_mode='host',
9899
version='1.23',
99100
volume_driver='some_driver',
100101
volumes=[
@@ -174,6 +175,7 @@ def test_create_container_args(self):
174175
'Tmpfs': {'/blah': ''},
175176
'Ulimits': [{"Name": "nofile", "Soft": 1024, "Hard": 2048}],
176177
'UsernsMode': 'host',
178+
'UTSMode': 'host',
177179
'VolumesFrom': ['container'],
178180
},
179181
healthcheck={'test': 'true'},

0 commit comments

Comments
 (0)