我正在尝试运行docker容器,具体地说openalpr
可以在这里找到:
https://hub.docker.com/r/openalpr/openalpr/
docker run -it --rm -v $(pwd):/data:ro openalpr -c us plateTest1.jpg
尝试将此命令作为子进程运行时,我在python中遇到错误:
导入子流程
app.py
result = subprocess.run(['docker', 'run', '-it', '--rm', '-v pwd:/data:ro', 'openalpr', '-c us', 'plateTest1.jpg'], capture_output=True)
print(result.stdout)
print(result.stderr)
以下是我得到的错误:
(base) mac@macs-MBP lpr % python openalpr_test.py
b''
b'docker: Error response from daemon: invalid volume specification: \' pwd:data:ro\': invalid mount config for type "volume": invalid mount path: \'data\' mount path must be absolute.\nSee \'docker run --help\'.\n'
我想这与逃逸斜杠有关
不完全是我设计的方式,但这似乎有效:
当您调用
subprocess.run([...])
时,您负责将命令分解为“单词”。这里没有进一步的处理;一切都按你的方式传递特别是当你
传递的参数正好是
-v pwd...
,包括单个参数中的空格。Docker看到一个-v
参数,并将这个“单词”的其余部分解析为卷规范,在冒号上打破它,因此以只读模式在容器路径/data
上挂载一个命名卷(带前导空格)pwd
。由于(space)pwd
不是有效的卷名,因此会出现此错误您可以将其拆分为两个单独的单词来消除歧义,或者删除中间的空格
(通常,如果存在具有相同功能的本机库或SDK,则最好避免将其作为子进程启动。您可以尝试使用Docker Python SDK来运行此进程。请记住,使用
docker run
非常容易要在整个主机上设置根目录的命令:要非常小心要启动什么以及如何处理命令行。)相关问题 更多 >
编程相关推荐