浏览代码

Fix "name is reserved" with Engine 1.10 RC1

Ensure link aliases are unique (this deduping was previously performed
on the server).

Signed-off-by: Aanand Prasad <[email protected]>
Aanand Prasad 9 年之前
父节点
当前提交
2106481c23
共有 2 个文件被更改,包括 16 次插入13 次删除
  1. 16 9
      compose/service.py
  2. 0 4
      tests/integration/service_test.py

+ 16 - 9
compose/service.py

@@ -502,24 +502,31 @@ class Service(object):
         if self.use_networking:
             return []
 
-        links = []
+        links = {}
+
         for service, link_name in self.links:
             for container in service.containers():
-                links.append((container.name, link_name or service.name))
-                links.append((container.name, container.name))
-                links.append((container.name, container.name_without_project))
+                links[link_name or service.name] = container.name
+                links[container.name] = container.name
+                links[container.name_without_project] = container.name
+
         if link_to_self:
             for container in self.containers():
-                links.append((container.name, self.name))
-                links.append((container.name, container.name))
-                links.append((container.name, container.name_without_project))
+                links[self.name] = container.name
+                links[container.name] = container.name
+                links[container.name_without_project] = container.name
+
         for external_link in self.options.get('external_links') or []:
             if ':' not in external_link:
                 link_name = external_link
             else:
                 external_link, link_name = external_link.split(':')
-            links.append((external_link, link_name))
-        return links
+            links[link_name] = external_link
+
+        return [
+            (alias, container_name)
+            for (container_name, alias) in links.items()
+        ]
 
     def _get_volumes_from(self):
         return [build_volume_from(spec) for spec in self.volumes_from]

+ 0 - 4
tests/integration/service_test.py

@@ -7,7 +7,6 @@ import tempfile
 from os import path
 
 from docker.errors import APIError
-from pytest import mark
 from six import StringIO
 from six import text_type
 
@@ -372,7 +371,6 @@ class ServiceTest(DockerClientTestCase):
         create_and_start_container(db)
         self.assertEqual(db.containers()[0].environment['FOO'], 'BAR')
 
-    @mark.skipif(True, reason="Engine returns error - needs investigating")
     def test_start_container_creates_links(self):
         db = self.create_service('db')
         web = self.create_service('web', links=[(db, None)])
@@ -389,7 +387,6 @@ class ServiceTest(DockerClientTestCase):
                 'db'])
         )
 
-    @mark.skipif(True, reason="Engine returns error - needs investigating")
     def test_start_container_creates_links_with_names(self):
         db = self.create_service('db')
         web = self.create_service('web', links=[(db, 'custom_link_name')])
@@ -433,7 +430,6 @@ class ServiceTest(DockerClientTestCase):
         c = create_and_start_container(db)
         self.assertEqual(set(get_links(c)), set([]))
 
-    @mark.skipif(True, reason="Engine returns error - needs investigating")
     def test_start_one_off_container_creates_links_to_its_own_service(self):
         db = self.create_service('db')