diff --git a/fig/service.py b/fig/service.py index 29ad34874..d13ba0c35 100644 --- a/fig/service.py +++ b/fig/service.py @@ -200,6 +200,10 @@ class Service(object): return tuples def recreate_container(self, container, **override_options): + """Recreate a container. An intermediate container is created so that + the new container has the same name, while still supporting + `volumes-from` the original container. + """ try: container.stop() except APIError as e: diff --git a/tests/integration/project_test.py b/tests/integration/project_test.py index a9123af85..ce0872458 100644 --- a/tests/integration/project_test.py +++ b/tests/integration/project_test.py @@ -94,7 +94,7 @@ class ProjectTest(DockerClientTestCase): def test_project_up_recreates_containers(self): web = self.create_service('web') - db = self.create_service('db', volumes=['/var/db']) + db = self.create_service('db', volumes=['/etc']) project = Project('figtest', [web, db], self.client) project.start() self.assertEqual(len(project.containers()), 0) @@ -102,15 +102,14 @@ class ProjectTest(DockerClientTestCase): project.up(['db']) self.assertEqual(len(project.containers()), 1) old_db_id = project.containers()[0].id - db_volume_path = project.containers()[0].inspect()['Volumes']['/var/db'] + db_volume_path = project.containers()[0].get('Volumes./etc') project.up() self.assertEqual(len(project.containers()), 2) db_container = [c for c in project.containers() if 'db' in c.name][0] self.assertNotEqual(db_container.id, old_db_id) - self.assertEqual(db_container.inspect()['Volumes']['/var/db'], - db_volume_path) + self.assertEqual(db_container.get('Volumes./etc'), db_volume_path) project.kill() project.remove_stopped() diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py index 16b1d9703..e2431f48e 100644 --- a/tests/integration/service_test.py +++ b/tests/integration/service_test.py @@ -107,14 +107,16 @@ class ServiceTest(DockerClientTestCase): host_service = self.create_service('host', volumes_from=[volume_service, volume_container_2]) host_container = host_service.create_container() host_service.start_container(host_container) - self.assertIn(volume_container_1.id, host_container.inspect()['HostConfig']['VolumesFrom']) - self.assertIn(volume_container_2.id, host_container.inspect()['HostConfig']['VolumesFrom']) + self.assertIn(volume_container_1.id, + host_container.get('HostConfig.VolumesFrom')) + self.assertIn(volume_container_2.id, + host_container.get('HostConfig.VolumesFrom')) def test_recreate_containers(self): service = self.create_service( 'db', environment={'FOO': '1'}, - volumes=['/var/db'], + volumes=['/etc'], entrypoint=['sleep'], command=['300'] ) @@ -124,7 +126,7 @@ class ServiceTest(DockerClientTestCase): self.assertIn('FOO=1', old_container.dictionary['Config']['Env']) self.assertEqual(old_container.name, 'figtest_db_1') service.start_container(old_container) - volume_path = old_container.inspect()['Volumes']['/var/db'] + volume_path = old_container.inspect()['Volumes']['/etc'] num_containers_before = len(self.client.containers(all=True)) @@ -140,7 +142,7 @@ class ServiceTest(DockerClientTestCase): self.assertEqual(new_container.dictionary['Config']['Cmd'], ['300']) self.assertIn('FOO=2', new_container.dictionary['Config']['Env']) self.assertEqual(new_container.name, 'figtest_db_1') - self.assertEqual(new_container.inspect()['Volumes']['/var/db'], volume_path) + self.assertEqual(new_container.inspect()['Volumes']['/etc'], volume_path) self.assertIn(intermediate_container.id, new_container.dictionary['HostConfig']['VolumesFrom']) self.assertEqual(len(self.client.containers(all=True)), num_containers_before) @@ -340,18 +342,18 @@ class ServiceTest(DockerClientTestCase): def test_network_mode_none(self): service = self.create_service('web', net='none') - container = service.start_container().inspect() - self.assertEqual(container['HostConfig']['NetworkMode'], 'none') + container = service.start_container() + self.assertEqual(container.get('HostConfig.NetworkMode'), 'none') def test_network_mode_bridged(self): service = self.create_service('web', net='bridge') - container = service.start_container().inspect() - self.assertEqual(container['HostConfig']['NetworkMode'], 'bridge') + container = service.start_container() + self.assertEqual(container.get('HostConfig.NetworkMode'), 'bridge') def test_network_mode_host(self): service = self.create_service('web', net='host') - container = service.start_container().inspect() - self.assertEqual(container['HostConfig']['NetworkMode'], 'host') + container = service.start_container() + self.assertEqual(container.get('HostConfig.NetworkMode'), 'host') def test_dns_single_value(self): service = self.create_service('web', dns='8.8.8.8')