Docker Desktop 不会自动创建宿主机不存在的挂载路径,-v 左侧路径必须真实存在且格式正确(如 C:/path),否则报 “no such file or directory”;需手动创建、检查 File Sharing 设置及父目录 ACL 权限。

不能。Docker Desktop 不会自动创建宿主机上不存在的挂载路径,直接报错退出——这不是权限问题,而是路径校验失败。
docker run -v 报 “no such file or directory” 怎么快速定位
这个错误几乎总是出现在 -v 参数左边(宿主机路径)不存在时。Docker 启动容器前会严格检查该路径是否真实存在且可访问,不满足就终止流程。
- 执行
docker run -v C:/missing:/app ubuntu:22.04 ls /app,会立即报错:invalid argument "C:/missing" for "-v" flag: stat C:/missing: no such file or directory - 用
dir C:\missing(Windows)或ls -d /missing(WSL2 终端)验证,确认路径确实为空 - 注意:错误信息里出现的路径是宿主机视角的,不是容器内路径,别被
/app干扰判断
Windows 上必须提前创建目录,且路径格式要对
Docker Desktop 在 Windows 下对路径敏感,即使目录存在,格式不对也会等效于“不存在”。
- 必须用正斜杠 + 驱动器前缀:
C:/mydata✅,C:\mydata❌,//c/mydata❌(这是旧版 WSL1 风格,已弃用) - 路径必须已存在:
mkdir C:\mydata是必要前置动作,-v不会递归建目录 - 含中文或空格的路径可以工作,但若出问题,先试纯英文路径排除干扰,例如改用
C:/test - 不要尝试挂载
docker-desktop或docker-desktop-data这类 WSL2 内部发行版目录——它们不对外开放挂载接口
挂载后容器内看不到文件?先查宿主机路径是否真被用了
有时命令没报错、容器也启动了,但挂载像“没生效”,大概率是挂载点被静默跳过,或路径拼写有细微差异。
- 进容器后运行
ls -l /app,如果显示的是空目录或默认内容(比如 nginx 的 welcome 页面),说明挂载未成功覆盖 - 在宿主机上执行
docker inspect | findstr "Source Destination"(Windows)或grep -A 3 Mounts(WSL2),确认Source字段值和你预期的完全一致(包括大小写、斜杠方向、盘符) - 特别注意:Docker Desktop 的 File Sharing 设置里没勾选对应盘符(如 E:),会导致路径“存在但不可达”,此时
docker run仍可能报no such file or directory,而非权限拒绝
最常被忽略的一点:路径存在、格式正确、共享已启用,但父目录缺少执行(x)权限——比如挂载 C:/a/b/c,而 C:/a 或 C:/a/b 的 Windows ACL 拒绝了 Docker Desktop 进程遍历,就会表现为“路径不存在”。这种问题在 NAS 或企业域环境下尤其隐蔽。











