From d3d594d0b6d00cef208041a4d44338fddb089e9b Mon Sep 17 00:00:00 2001 From: Damon Jablons Date: Tue, 1 Apr 2014 15:20:13 -0400 Subject: [PATCH 1/3] Allow volumes_from to be an iterable --- docker/client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/client.py b/docker/client.py index 1a4eaa30..ae5a99fc 100644 --- a/docker/client.py +++ b/docker/client.py @@ -155,6 +155,9 @@ class Client(requests.Session): volumes_dict[vol] = {} volumes = volumes_dict + if not isinstance(volumes_from, six.string_types): + volumes_from = ','.join(volumes_from) + attach_stdin = False attach_stdout = False attach_stderr = False From ced3d5d71a780cb5d5d8fbb964cef89c4eb51090 Mon Sep 17 00:00:00 2001 From: Damon Jablons Date: Tue, 1 Apr 2014 16:08:06 -0400 Subject: [PATCH 2/3] Ensure that volumes_from exists --- docker/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/client.py b/docker/client.py index ae5a99fc..776eb6b9 100644 --- a/docker/client.py +++ b/docker/client.py @@ -155,7 +155,7 @@ class Client(requests.Session): volumes_dict[vol] = {} volumes = volumes_dict - if not isinstance(volumes_from, six.string_types): + if volumes_from and not isinstance(volumes_from, six.string_types): volumes_from = ','.join(volumes_from) attach_stdin = False From cdd52a172f99b9db4f9aad92f49a60ac4990ac8e Mon Sep 17 00:00:00 2001 From: Damon Jablons Date: Tue, 1 Apr 2014 16:08:25 -0400 Subject: [PATCH 3/3] Added test for container with volumes_from --- tests/integration_test.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/integration_test.py b/tests/integration_test.py index c6189ffb..5ebd364d 100644 --- a/tests/integration_test.py +++ b/tests/integration_test.py @@ -514,6 +514,36 @@ class TestRemoveContainerWithDictInsteadOfId(BaseTestCase): self.assertEqual(len(res), 0) +class TestStartContainerWithVolumesFrom(BaseTestCase): + def runTest(self): + vol_names = ['foobar_vol0', 'foobar_vol1'] + + res0 = self.client.create_container( + 'busybox', 'true', + name=vol_names[0]) + container1_id = res0['Id'] + self.tmp_containers.append(container1_id) + self.client.start(container1_id) + + res1 = self.client.create_container( + 'busybox', 'true', + name=vol_names[1]) + container2_id = res1['Id'] + self.tmp_containers.append(container2_id) + self.client.start(container2_id) + + res2 = self.client.create_container( + 'busybox', 'cat', + detach=True, stdin_open=True, + volumes_from=vol_names) + container3_id = res2['Id'] + self.tmp_containers.append(container3_id) + self.client.start(container3_id) + + info = self.client.inspect_container(res2['Id']) + self.assertEqual(info['Config']['VolumesFrom'], ','.join(vol_names)) + + class TestStartContainerWithLinks(BaseTestCase): def runTest(self): res0 = self.client.create_container(