зеркало из https://github.com/docker/docker-py.git
Correctly parse volumes with Windows paths
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Родитель
42b2548e5d
Коммит
209ae2423d
|
@ -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')
|
||||
|
|
|
@ -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'
|
||||
)
|
||||
|
|
Загрузка…
Ссылка в новой задаче