From 8c81a9da7a846c1f0b1fe3b40e7c7ab2e70c2215 Mon Sep 17 00:00:00 2001 From: aiordache Date: Mon, 14 Sep 2020 17:02:19 +0200 Subject: [PATCH] Enable relative paths for driver_opts.device Signed-off-by: aiordache --- compose/config/config.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/compose/config/config.py b/compose/config/config.py index 7b3969b6c..69d0d902d 100644 --- a/compose/config/config.py +++ b/compose/config/config.py @@ -423,17 +423,31 @@ def load_mapping(config_files, get_func, entity_type, working_dir=None): elif not config.get('name'): config['name'] = name - if 'driver_opts' in config: - config['driver_opts'] = build_string_dict( - config['driver_opts'] - ) - if 'labels' in config: config['labels'] = parse_labels(config['labels']) if 'file' in config: config['file'] = expand_path(working_dir, config['file']) + if 'driver_opts' in config: + config['driver_opts'] = build_string_dict( + config['driver_opts'] + ) + if entity_type != 'Volume': + continue + # default driver is 'local' + driver = config.get('driver', 'local') + if driver != 'local': + continue + o = config['driver_opts'].get('o') + device = config['driver_opts'].get('device') + if o and o == 'bind' and device: + fullpath = os.path.abspath(os.path.expanduser(device)) + if not os.path.exists(fullpath): + raise ConfigurationError( + "Device path {} does not exist.".format(fullpath)) + config['driver_opts']['device'] = fullpath + return mapping