From 4795fd874f50254af3e9fb6cb60b25410b8456ab Mon Sep 17 00:00:00 2001 From: Aanand Prasad Date: Thu, 21 May 2015 20:03:02 +0100 Subject: [PATCH] Fix regression in `docker-compose up` When an upstream dependency (e.g. a db) has a container but a downstream service (e.g. a web app) doesn't, a web container is not created on `docker-compose up`. Signed-off-by: Aanand Prasad --- compose/project.py | 7 +++++-- compose/service.py | 4 ---- tests/integration/project_test.py | 12 ++++++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/compose/project.py b/compose/project.py index 6dc9266812..d3deeeaf96 100644 --- a/compose/project.py +++ b/compose/project.py @@ -248,10 +248,13 @@ class Project(object): if updated_dependencies: log.debug( - '%s has not changed but its dependencies (%s) have, so recreating', + '%s has upstream changes (%s)', service.name, ", ".join(updated_dependencies), ) - plan = service.recreate_plan() + plan = service.convergence_plan( + allow_recreate=allow_recreate, + smart_recreate=False, + ) else: plan = service.convergence_plan( allow_recreate=allow_recreate, diff --git a/compose/service.py b/compose/service.py index c45a8bdfcd..ccfb385118 100644 --- a/compose/service.py +++ b/compose/service.py @@ -294,10 +294,6 @@ class Service(object): return ConvergencePlan('recreate', containers) - def recreate_plan(self): - containers = self.containers(stopped=True) - return ConvergencePlan('recreate', containers) - def _containers_have_diverged(self, containers): config_hash = self.config_hash() has_diverged = False diff --git a/tests/integration/project_test.py b/tests/integration/project_test.py index 5e3a40e5b7..2976af823b 100644 --- a/tests/integration/project_test.py +++ b/tests/integration/project_test.py @@ -174,6 +174,18 @@ class ProjectTest(DockerClientTestCase): project.kill() project.remove_stopped() + def test_project_up_starts_uncreated_services(self): + db = self.create_service('db') + web = self.create_service('web', links=[(db, 'db')]) + project = Project('composetest', [db, web], self.client) + project.up(['db']) + self.assertEqual(len(project.containers()), 1) + + project.up() + self.assertEqual(len(project.containers()), 2) + self.assertEqual(len(db.containers()), 1) + self.assertEqual(len(web.containers()), 1) + def test_project_up_recreates_containers(self): web = self.create_service('web') db = self.create_service('db', volumes=['/etc'])