summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2018-01-31 15:12:15 -0800
committerJoffrey F <joffrey@docker.com>2018-01-31 15:12:15 -0800
commit209ae2423d3fc1f41ed8dc617963d560d9d9e4e1 (patch)
treea7b8bc9f749cd4ae903f9d26e7af4745c0ba792b
parent42b2548e5d51ed2b92e31e288d1f902f4a6dd445 (diff)
downloaddocker-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.py24
-rw-r--r--tests/unit/models_containers_test.py7
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'
)