From d475e0c1e3df983406962addd5e778d8d29ba7b2 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Wed, 5 Jul 2017 15:13:45 -0700 Subject: [PATCH] Add "network" field to build configuration Signed-off-by: Joffrey F --- compose/config/config.py | 1 + compose/config/config_schema_v2.2.json | 3 ++- compose/service.py | 3 ++- tests/integration/service_test.py | 24 ++++++++++++++++++++++++ tests/unit/service_test.py | 2 ++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/compose/config/config.py b/compose/config/config.py index 86cf1b39d..4be251882 100644 --- a/compose/config/config.py +++ b/compose/config/config.py @@ -975,6 +975,7 @@ def merge_build(output, base, override): md = MergeDict(to_dict(base), to_dict(override)) md.merge_scalar('context') md.merge_scalar('dockerfile') + md.merge_scalar('network') md.merge_mapping('args', parse_build_arguments) md.merge_field('cache_from', merge_unique_items_lists, default=[]) md.merge_mapping('labels', parse_labels) diff --git a/compose/config/config_schema_v2.2.json b/compose/config/config_schema_v2.2.json index 87ba26ae4..9181e606b 100644 --- a/compose/config/config_schema_v2.2.json +++ b/compose/config/config_schema_v2.2.json @@ -60,7 +60,8 @@ "dockerfile": {"type": "string"}, "args": {"$ref": "#/definitions/list_or_dict"}, "labels": {"$ref": "#/definitions/list_or_dict"}, - "cache_from": {"$ref": "#/definitions/list_of_strings"} + "cache_from": {"$ref": "#/definitions/list_of_strings"}, + "network": {"type": "string"} }, "additionalProperties": false } diff --git a/compose/service.py b/compose/service.py index 300ec2852..53ad46362 100644 --- a/compose/service.py +++ b/compose/service.py @@ -906,7 +906,8 @@ class Service(object): dockerfile=build_opts.get('dockerfile', None), cache_from=build_opts.get('cache_from', None), labels=build_opts.get('labels', None), - buildargs=build_args + buildargs=build_args, + network_mode=build_opts.get('network', None), ) try: diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py index ccd6c8b00..350f7398b 100644 --- a/tests/integration/service_test.py +++ b/tests/integration/service_test.py @@ -717,6 +717,30 @@ class ServiceTest(DockerClientTestCase): assert service.image() assert service.image()['Config']['Labels']['com.docker.compose.test'] == 'true' + def test_build_with_network(self): + base_dir = tempfile.mkdtemp() + self.addCleanup(shutil.rmtree, base_dir) + with open(os.path.join(base_dir, 'Dockerfile'), 'w') as f: + f.write('FROM busybox\n') + f.write('RUN ping -c1 google.local\n') + + net_container = self.client.create_container( + 'busybox', 'top', host_config=self.client.create_host_config( + extra_hosts={'google.local': '8.8.8.8'} + ), name='composetest_build_network' + ) + + self.addCleanup(self.client.remove_container, net_container, force=True) + self.client.start(net_container) + + service = self.create_service('buildwithnet', build={ + 'context': text_type(base_dir), + 'network': 'container:{}'.format(net_container['Id']) + }) + + service.build() + assert service.image() + def test_start_container_stays_unprivileged(self): service = self.create_service('web') container = create_and_start_container(service).inspect() diff --git a/tests/unit/service_test.py b/tests/unit/service_test.py index 7b7a078f8..2b0a2762d 100644 --- a/tests/unit/service_test.py +++ b/tests/unit/service_test.py @@ -473,6 +473,7 @@ class ServiceTest(unittest.TestCase): buildargs={}, labels=None, cache_from=None, + network_mode=None, ) def test_ensure_image_exists_no_build(self): @@ -511,6 +512,7 @@ class ServiceTest(unittest.TestCase): buildargs={}, labels=None, cache_from=None, + network_mode=None, ) def test_build_does_not_pull(self):