diff options
author | Joffrey F <joffrey@docker.com> | 2018-01-31 15:12:15 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2018-01-31 15:12:15 -0800 |
commit | 209ae2423d3fc1f41ed8dc617963d560d9d9e4e1 (patch) | |
tree | a7b8bc9f749cd4ae903f9d26e7af4745c0ba792b | |
parent | 42b2548e5d51ed2b92e31e288d1f902f4a6dd445 (diff) | |
download | docker-py-209ae2423d3fc1f41ed8dc617963d560d9d9e4e1.tar.gz |
Correctly parse volumes with Windows paths1884-create_volumes_win32
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/models/containers.py | 24 | ||||
-rw-r--r-- | tests/unit/models_containers_test.py | 7 |
2 files changed, 20 insertions, 11 deletions
diff --git a/docker/models/containers.py b/docker/models/containers.py index 79fd71d..e05aa62 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -1,4 +1,5 @@ import copy +import ntpath from collections import namedtuple from ..api import APIClient @@ -995,20 +996,25 @@ def _create_container_args(kwargs): # sort to make consistent for tests create_kwargs['ports'] = [tuple(p.split('/', 1)) for p in sorted(port_bindings.keys())] - binds = create_kwargs['host_config'].get('Binds') - if binds: - create_kwargs['volumes'] = [_host_volume_from_bind(v) for v in binds] + if volumes: + if isinstance(volumes, dict): + create_kwargs['volumes'] = [ + v.get('bind') for v in volumes.values() + ] + else: + create_kwargs['volumes'] = [ + _host_volume_from_bind(v) for v in volumes + ] return create_kwargs def _host_volume_from_bind(bind): - bits = bind.split(':') - if len(bits) == 1: - return bits[0] - elif len(bits) == 2 and bits[1] in ('ro', 'rw'): - return bits[0] + drive, rest = ntpath.splitdrive(bind) + bits = rest.split(':', 1) + if len(bits) == 1 or bits[1] in ('ro', 'rw'): + return drive + bits[0] else: - return bits[1] + return bits[1].rstrip(':ro').rstrip(':rw') ExecResult = namedtuple('ExecResult', 'exit_code,output') diff --git a/tests/unit/models_containers_test.py b/tests/unit/models_containers_test.py index 1fdd7a5..cdc9318 100644 --- a/tests/unit/models_containers_test.py +++ b/tests/unit/models_containers_test.py @@ -102,6 +102,7 @@ class ContainerCollectionTest(unittest.TestCase): 'volumename:/mnt/vol3', '/volumewithnohostpath', '/anothervolumewithnohostpath:ro', + 'C:\\windows\\path:D:\\hello\\world:rw' ], volumes_from=['container'], working_dir='/code' @@ -120,7 +121,8 @@ class ContainerCollectionTest(unittest.TestCase): '/var/www:/mnt/vol1:ro', 'volumename:/mnt/vol3', '/volumewithnohostpath', - '/anothervolumewithnohostpath:ro' + '/anothervolumewithnohostpath:ro', + 'C:\\windows\\path:D:\\hello\\world:rw' ], 'BlkioDeviceReadBps': [{'Path': 'foo', 'Rate': 3}], 'BlkioDeviceReadIOps': [{'Path': 'foo', 'Rate': 3}], @@ -191,7 +193,8 @@ class ContainerCollectionTest(unittest.TestCase): '/mnt/vol1', '/mnt/vol3', '/volumewithnohostpath', - '/anothervolumewithnohostpath' + '/anothervolumewithnohostpath', + 'D:\\hello\\world' ], working_dir='/code' ) |