Browse Source

Allow overriding of config for the default network

Signed-off-by: Aanand Prasad <[email protected]>
Aanand Prasad 9 năm trước cách đây
mục cha
commit
e7673bf920

+ 16 - 15
compose/project.py

@@ -58,23 +58,24 @@ class Project(object):
         use_networking = (config_data.version and config_data.version >= 2)
         project = cls(name, [], client, use_networking=use_networking)
 
-        custom_networks = []
-        if config_data.networks:
-            for network_name, data in config_data.networks.items():
-                custom_networks.append(
-                    Network(
-                        client=client, project=name, name=network_name,
-                        driver=data.get('driver'),
-                        driver_opts=data.get('driver_opts'),
-                        external_name=data.get('external_name'),
-                    )
-                )
+        network_config = config_data.networks or {}
+        custom_networks = [
+            Network(
+                client=client, project=name, name=network_name,
+                driver=data.get('driver'),
+                driver_opts=data.get('driver_opts'),
+                external_name=data.get('external_name'),
+            )
+            for network_name, data in network_config.items()
+        ]
+
+        all_networks = custom_networks[:]
+        if 'default' not in network_config:
+            all_networks.append(project.default_network)
 
         for service_dict in config_data.services:
             if use_networking:
-                networks = get_networks(
-                    service_dict,
-                    custom_networks + [project.default_network])
+                networks = get_networks(service_dict, all_networks)
                 net = Net(networks[0]) if networks else Net("none")
                 links = []
             else:
@@ -96,7 +97,7 @@ class Project(object):
                     **service_dict))
 
         project.networks += custom_networks
-        if project.uses_default_network():
+        if 'default' not in network_config and project.uses_default_network():
             project.networks.append(project.default_network)
 
         if config_data.volumes:

+ 13 - 0
tests/acceptance/cli_test.py

@@ -409,6 +409,7 @@ class CLITestCase(DockerClientTestCase):
         networks = self.client.networks(names=[self.project.default_network.full_name])
         self.assertEqual(len(networks), 1)
         self.assertEqual(networks[0]['Driver'], 'bridge')
+        assert 'com.docker.network.bridge.enable_icc' not in networks[0]['Options']
 
         network = self.client.inspect_network(networks[0]['Id'])
 
@@ -425,6 +426,18 @@ class CLITestCase(DockerClientTestCase):
             for service in services:
                 assert self.lookup(container, service.name)
 
+    @v2_only()
+    def test_up_with_default_network_config(self):
+        filename = 'default-network-config.yml'
+
+        self.base_dir = 'tests/fixtures/networks'
+        self._project = get_project(self.base_dir, [filename])
+
+        self.dispatch(['-f', filename, 'up', '-d'], None)
+
+        networks = self.client.networks(names=[self.project.default_network.full_name])
+        assert networks[0]['Options']['com.docker.network.bridge.enable_icc'] == 'false'
+
     @v2_only()
     def test_up_with_networks(self):
         self.base_dir = 'tests/fixtures/networks'

+ 13 - 0
tests/fixtures/networks/default-network-config.yml

@@ -0,0 +1,13 @@
+version: 2
+services:
+  simple:
+    image: busybox:latest
+    command: top
+  another:
+    image: busybox:latest
+    command: top
+networks:
+  default:
+    driver: bridge
+    driver_opts:
+      "com.docker.network.bridge.enable_icc": "false"