瀏覽代碼

Fix split_path_mapping behavior when mounting "/"

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 9 年之前
父節點
當前提交
60f7e021ad
共有 2 個文件被更改,包括 11 次插入3 次删除
  1. 4 3
      compose/config/config.py
  2. 7 0
      tests/unit/config/config_test.py

+ 4 - 3
compose/config/config.py

@@ -940,9 +940,10 @@ def split_path_mapping(volume_path):
     path. Using splitdrive so windows absolute paths won't cause issues with
     splitting on ':'.
     """
-    # splitdrive has limitations when it comes to relative paths, so when it's
-    # relative, handle special case to set the drive to ''
-    if volume_path.startswith('.') or volume_path.startswith('~'):
+    # splitdrive is very naive, so handle special cases where we can be sure
+    # the first character is not a drive.
+    if (volume_path.startswith('.') or volume_path.startswith('~') or
+            volume_path.startswith('/')):
         drive, volume_config = '', volume_path
     else:
         drive, volume_config = ntpath.splitdrive(volume_path)

+ 7 - 0
tests/unit/config/config_test.py

@@ -2682,6 +2682,13 @@ class VolumePathTest(unittest.TestCase):
         mapping = config.split_path_mapping('{0}:{1}'.format(host_path, container_path))
         assert mapping == expected_mapping
 
+    def test_split_path_mapping_with_root_mount(self):
+        host_path = '/'
+        container_path = '/var/hostroot'
+        expected_mapping = (container_path, host_path)
+        mapping = config.split_path_mapping('{0}:{1}'.format(host_path, container_path))
+        assert mapping == expected_mapping
+
 
 @pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason='paths use slash')
 class BuildPathTest(unittest.TestCase):