Implement userns_mode HostConfig for services

Fixes #3349

This allows the key `userns_mode` to be used in service definitions.
Since `userns_mode` requires API version > 1.23, this is only available
in 2.1 and 3.0 versions of compose file

Signed-off-by: Yong Wen Chua <me@yongwen.xyz>
This commit is contained in:
Yong Wen Chua 2016-12-05 14:25:56 +08:00
parent 9bfb855b89
commit 62f8b1402e
5 changed files with 19 additions and 1 deletions

View File

@ -86,6 +86,7 @@ DOCKER_CONFIG_KEYS = [
'stop_signal', 'stop_signal',
'tty', 'tty',
'user', 'user',
'userns_mode',
'volume_driver', 'volume_driver',
'volumes', 'volumes',
'volumes_from', 'volumes_from',

View File

@ -217,6 +217,7 @@
} }
}, },
"user": {"type": "string"}, "user": {"type": "string"},
"userns_mode": {"type": "string"},
"volumes": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, "volumes": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
"volume_driver": {"type": "string"}, "volume_driver": {"type": "string"},
"volumes_from": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, "volumes_from": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},

View File

@ -192,6 +192,7 @@
} }
}, },
"user": {"type": "string"}, "user": {"type": "string"},
"userns_mode": {"type": "string"},
"volumes": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, "volumes": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
"working_dir": {"type": "string"} "working_dir": {"type": "string"}
}, },

View File

@ -64,6 +64,7 @@ DOCKER_START_KEYS = [
'restart', 'restart',
'security_opt', 'security_opt',
'shm_size', 'shm_size',
'userns_mode',
'volumes_from', 'volumes_from',
] ]
@ -720,7 +721,8 @@ class Service(object):
tmpfs=options.get('tmpfs'), tmpfs=options.get('tmpfs'),
oom_score_adj=options.get('oom_score_adj'), oom_score_adj=options.get('oom_score_adj'),
mem_swappiness=options.get('mem_swappiness'), mem_swappiness=options.get('mem_swappiness'),
group_add=options.get('group_add') group_add=options.get('group_add'),
userns_mode=options.get('userns_mode')
) )
# TODO: Add as an argument to create_host_config once it's supported # TODO: Add as an argument to create_host_config once it's supported

View File

@ -30,6 +30,7 @@ from compose.service import ConvergencePlan
from compose.service import ConvergenceStrategy from compose.service import ConvergenceStrategy
from compose.service import NetworkMode from compose.service import NetworkMode
from compose.service import Service from compose.service import Service
from tests.integration.testcases import v2_1_only
from tests.integration.testcases import v2_only from tests.integration.testcases import v2_only
@ -842,6 +843,18 @@ class ServiceTest(DockerClientTestCase):
container = create_and_start_container(service) container = create_and_start_container(service)
self.assertEqual(container.get('HostConfig.PidMode'), 'host') self.assertEqual(container.get('HostConfig.PidMode'), 'host')
@v2_1_only()
def test_userns_mode_none_defined(self):
service = self.create_service('web', userns_mode=None)
container = create_and_start_container(service)
self.assertEqual(container.get('HostConfig.UsernsMode'), '')
@v2_1_only()
def test_userns_mode_host(self):
service = self.create_service('web', userns_mode='host')
container = create_and_start_container(service)
self.assertEqual(container.get('HostConfig.UsernsMode'), 'host')
def test_dns_no_value(self): def test_dns_no_value(self):
service = self.create_service('web') service = self.create_service('web')
container = create_and_start_container(service) container = create_and_start_container(service)