浏览代码

Merge pull request #2746 from aanand/alias-containers-by-short-id

Alias containers by short id
Joffrey F 9 年之前
父节点
当前提交
af6b18cad8
共有 2 个文件被更改,包括 15 次插入24 次删除
  1. 9 22
      compose/service.py
  2. 6 2
      tests/acceptance/cli_test.py

+ 9 - 22
compose/service.py

@@ -430,12 +430,16 @@ class Service(object):
         return container
 
     def connect_container_to_networks(self, container):
-        one_off = (container.labels.get(LABEL_ONE_OFF) == "True")
+        connected_networks = container.get('NetworkSettings.Networks')
 
         for network in self.networks:
+            if network in connected_networks:
+                self.client.disconnect_container_from_network(
+                    container.id, network)
+
             self.client.connect_container_to_network(
                 container.id, network,
-                aliases=self._get_aliases(one_off=one_off),
+                aliases=self._get_aliases(container),
                 links=self._get_links(False),
             )
 
@@ -507,11 +511,11 @@ class Service(object):
         numbers = [c.number for c in containers]
         return 1 if not numbers else max(numbers) + 1
 
-    def _get_aliases(self, one_off):
-        if one_off:
+    def _get_aliases(self, container):
+        if container.labels.get(LABEL_ONE_OFF) == "True":
             return []
 
-        return [self.name]
+        return [self.name, container.short_id]
 
     def _get_links(self, link_to_self):
         links = {}
@@ -618,9 +622,6 @@ class Service(object):
             override_options,
             one_off=one_off)
 
-        container_options['networking_config'] = self._get_container_networking_config(
-            one_off=one_off)
-
         return container_options
 
     def _get_container_host_config(self, override_options, one_off=False):
@@ -655,20 +656,6 @@ class Service(object):
             cpu_quota=options.get('cpu_quota'),
         )
 
-    def _get_container_networking_config(self, one_off=False):
-        if self.net.mode in ['host', 'bridge']:
-            return None
-
-        if self.net.mode not in self.networks:
-            return None
-
-        return self.client.create_networking_config({
-            self.net.mode: self.client.create_endpoint_config(
-                aliases=self._get_aliases(one_off=one_off),
-                links=self._get_links(False),
-            )
-        })
-
     def build(self, no_cache=False, pull=False, force_rm=False):
         log.info('Building %s' % self.name)
 

+ 6 - 2
tests/acceptance/cli_test.py

@@ -420,8 +420,12 @@ class CLITestCase(DockerClientTestCase):
             container = containers[0]
             self.assertIn(container.id, network['Containers'])
 
-            networks = list(container.get('NetworkSettings.Networks'))
-            self.assertEqual(networks, [network['Name']])
+            networks = container.get('NetworkSettings.Networks')
+            self.assertEqual(list(networks), [network['Name']])
+
+            self.assertEqual(
+                sorted(networks[network['Name']]['Aliases']),
+                sorted([service.name, container.short_id]))
 
             for service in services:
                 assert self.lookup(container, service.name)