Docker绑定挂载当前目录至容器卷后ls无文件问题求助
故障根本原因
挂载失败完全是路径包含空格时shell参数拆分导致的,和路径里的大写字符没有任何关系。
你执行docker run命令时写的-v ${pwd}:/examples没有对变量做引用包裹,shell在展开变量内容时,会把空格识别为参数分隔符,把你带空格的完整工作路径拆成了多个独立参数传给Docker。你的工作路径/home/hell/Desktop/PhD/PHD/Nvidia Modulus/Modulus v22.03包含两处空格,展开后实际传给Docker的参数被拆成了三段,Docker根本没有拿到完整的宿主机目录路径,会默认自动创建一个空的无名目录挂载到容器的/examples路径下,这就是你进入容器后只能看到空目录的原因。
挂载/home/hell/路径时能正常工作,是因为这个路径不包含空格,变量展开后是完整的单个参数,Docker可以正确识别到宿主机的已有目录,所以挂载正常。
对应解决方法
你可以任选以下一种方案修复问题:
- 最通用推荐方案:给挂载路径的变量整体加双引号包裹,强制shell把引号内的内容识别为单个参数,不会按空格拆分。修改后的启动命令为:
docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -v "${PWD}:/examples" -it modulus:22.03 bash
注意bash环境中内置的当前工作目录变量为大写的$PWD,你也可以用"$(pwd):/examples"的写法,通过执行pwd命令获取当前路径,兼容性更强,在各类shell环境下都能正常工作。
- 手动转义空格方案:如果你要直接写完整宿主机路径,可以在路径里的每个空格前加反斜杠
\做转义,写法示例:
docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -v /home/hell/Desktop/PhD/PHD/Nvidia\ Modulus/Modulus\ v22.03:/examples -it modulus:22.03 bash
这种方法适合路径短、空格少的场景,路径较长时容易漏写转义符,不推荐优先使用。
- 路径规避方案:你也可以把需要挂载的目录移动/软链接到一个不含空格、特殊字符的路径下再执行挂载,属于间接绕开问题的方案,操作成本较高,仅作为备选。
内容的提问来源于stack exchange,提问作者Prakhar Sharma
相关产品推荐
相关产品推荐

