Docker for Mac下docker run与docker-compose卷映射规则不一致疑问
两者的路径解析逻辑存在差异,核心原因如下:
- docker-compose作为上层封装工具,运行在你Mac的本地用户空间,会自动将配置文件中写的相对路径,转换为docker-compose.yml文件所在目录对应的绝对路径后,再传给Docker后台进程执行,所以你写的
./client可以被正常识别成本地目录挂载。 - 原生
docker run命令不会做相对路径的自动解析,会直接将你输入的路径参数透传给Docker后台进程。而Docker for Mac的后台进程实际运行在内置的Linux虚拟机内,它没有你Mac本地shell的当前工作目录上下文,因此会把你输入的./client误判为命名卷的名称,但命名卷不允许包含/等特殊字符,就会抛出你遇到的报错。你直接写client:/app被识别为命名卷也是同样的逻辑。
对应解决方法
你可以手动将相对路径转换为绝对路径传入docker run,Mac环境下直接使用$(pwd)获取当前工作目录的绝对路径即可,修改后的命令如下:
docker run -v $(pwd)/client:/app -v /app/node_modules --name clientcont clientimage
内容的提问来源于stack exchange,提问作者Harshit Rajput
相关产品推荐
相关产品推荐

