Когда вы звоните subprocess.run([...])
, вы несете ответственность за разбиение команды на «слова». Здесь нет дальнейшей обработки; все передается точно , как у вас есть.
В частности, когда вы
subprocess.run([..., '-v pwd:/data:ro', ...])
Переданный аргумент в точности равен -v pwd...
, включая пробел в единственном числе аргумент. Docker видит аргумент -v
и анализирует оставшуюся часть этого "слова" как спецификацию тома, разбивая его на двоеточия, монтируя именованный том (с начальным пробелом) pwd
на пути контейнера /data
в read только режим. Поскольку (пробел) pwd
не является допустимым именем тома, вы получаете эту ошибку.
Вы можете разбить это на два отдельных слова, чтобы устранить неоднозначность, или удалить промежуточный пробел.
subprocess.run([..., '-v', 'pwd:/data:ro', ...])
subprocess.run([..., '-vpwd:/data:ro', ...])
(Как правило, лучше не запускать вещи как подпроцессы, если есть собственная библиотека или SDK с той же функциональностью. Вы можете попробовать запустить этот процесс, используя Docker Python SDK Вместо этого, помните, что очень просто использовать команду docker run
для root всего хоста: будьте очень осторожны с тем, что вы запускаете и как обрабатываются командные строки.)