瀏覽代碼

Link services to themselves

E.g. `fig run db ...` will be able to access the db service.
Ben Firshman 11 年之前
父節點
當前提交
e4e9f0bc19
共有 3 個文件被更改,包括 14 次插入2 次删除
  1. 4 0
      docs/cli.md
  2. 3 0
      fig/service.py
  3. 7 2
      tests/service_test.py

+ 4 - 0
docs/cli.md

@@ -49,6 +49,10 @@ Note that this will not start any services that the command's service links to.
 
 One-off commands are started in new containers with the same config as a normal container for that service, so volumes, links, etc will all be created as expected. The only thing different to a normal container is the command will be overridden with the one specified and no ports will be created in case they collide.
 
+Links are also created between one-off commands and the other containers for that service so you can do stuff like this:
+
+    $ fig run db /bin/sh -c "psql -h \$DB_1_PORT_5432_TCP_ADDR -U docker"
+
 ## scale
 
 Set number of containers to run for a service.

+ 3 - 0
fig/service.py

@@ -212,6 +212,9 @@ class Service(object):
             for container in service.containers():
                 links.append((container.name, container.name))
                 links.append((container.name, container.name_without_project))
+        for container in self.containers():
+            links.append((container.name, container.name))
+            links.append((container.name, container.name_without_project))
         return links
 
     def _get_container_options(self, override_options, one_off=False):

+ 7 - 2
tests/service_test.py

@@ -155,8 +155,13 @@ class ServiceTest(DockerClientTestCase):
         web.start_container()
         self.assertIn('figtest_db_1', web.containers()[0].links())
         self.assertIn('db_1', web.containers()[0].links())
-        db.stop(timeout=1)
-        web.stop(timeout=1)
+
+    def test_start_container_creates_links_to_its_own_service(self):
+        db1 = self.create_service('db')
+        db2 = self.create_service('db')
+        db1.start_container()
+        db2.start_container()
+        self.assertIn('db_1', db2.containers()[0].links())
 
     def test_start_container_builds_images(self):
         service = Service(