根本原因是WSL未成功挂载Windows文件系统,导致/mnt/c不存在;需先执行wsl --shutdown并重启发行版,再检查Windows功能、BIOS虚拟化及Docker Desktop的File Sharing设置是否启用对应路径。

Docker Desktop 启动后,docker run -v 挂载 Windows 路径失败,报错 invalid argument 或容器内 /mnt/c/xxx 目录为空——根本不是 Docker 配置错了,而是 WSL 里压根没挂上 Windows 文件系统。
WSL 启动后 /mnt/c 根本不存在
这是最基础但最容易被跳过的一步:WSL 发行版(比如 ubuntu-22.04 或 docker-desktop)必须成功启动并完成自动挂载,/mnt/c 才会出现。如果连这个都没有,后续所有 -v C:path:/app 都会直接失败。
常见现象:
- 在 PowerShell 里执行
wsl -d Ubuntu-22.04进入发行版,ls /mnt返回空目录 -
wsl --list --verbose显示状态是Stopped,但你刚点开 Docker Desktop - 手动运行
wsl命令卡住、无响应,或报WslRegisterDistribution failed: 0x800701bc
实操建议:
- 先用
wsl --shutdown彻底终止所有 WSL 实例,再重新启动任意一个发行版(如wsl -d Ubuntu-22.04),观察是否能正常进入 shell 并看到/mnt/c - 如果仍不挂载,检查 Windows 功能是否完整启用:
Microsoft-Windows-Subsystem-Linux和VirtualMachinePlatform必须都是Enabled,缺一不可 - 确认 BIOS 中虚拟化(Intel VT-x / AMD SVM)已打开——否则 WSL2 内核根本起不来,
/mnt/c就是镜花水月
docker run -v C:xxx:/app 一直报 invalid argument
这个错误的真正含义是:Docker Daemon 在 WSL2 里尝试解析 C:xxx 这个路径时失败了。它不是不支持 Windows 路径写法,而是当前上下文根本没权限或没能力把该路径映射过去。
关键原因:
- Docker Desktop 默认只信任它自己配置过的“共享文件夹”,未添加的 Windows 路径一律拒绝挂载
- 路径中含中文、空格、特殊符号(如
&、#)时,PowerShell 或 CMD 会提前截断或转义,导致传给 Docker 的路径已损坏 - 你正在用的是 Windows 容器模式(而非 Linux 容器),此时
-v C:xxx是合法的,但 Docker Desktop 界面右下角显示的是Windows Containers,而你误以为是 Linux 模式
实操建议:
- 打开 Docker Desktop → Settings → Resources → File Sharing,把要用的盘符(如
C:)或具体目录(如C:projects)加进去,点击 Apply & Restart - 命令行中统一用正斜杠或双反斜杠:
docker run -v C:/projects/myapp:/app或docker run -v C:\projects\myapp:/app,避免单反斜杠被 shell 吞掉 - 确认右下角鲸鱼图标旁显示的是
Linux Containers;如果是Windows Containers,点它切换回来
挂载进容器后 /app 里文件是空的,但 Windows 端明明有内容
这说明挂载动作本身成功了,但 WSL 对 Windows 文件系统的访问被阻断了——典型表现是容器内能看到目录结构,但 ls -l /app 显示所有文件大小为 0,或提示 Permission denied。
根源在于 WSL 的 ACL(访问控制列表)同步机制。Windows 文件若设置了“仅管理员可读”或启用了“加密文件系统(EFS)”,WSL 默认不会继承这些权限,表现为“看得见、读不到”。
实操建议:
- 在 Windows 端右键目标文件夹 → 属性 → 安全 → 编辑 → 添加用户
ALL APPLICATION PACKAGES,赋予“读取”权限(这是 WSL2 进程运行所需的安全上下文) - 避免将项目放在
C:Users<user>AppData</user>、C:Program Files等受保护路径下;优先使用C:projects、D:dev这类干净路径 - 临时验证:在 WSL 终端里执行
ls -l /mnt/c/projects/myapp,如果也显示为空或权限拒绝,问题一定出在 Windows 侧,和 Docker 无关
最常被忽略的一点:Docker Desktop 的 File Sharing 设置不是“一次配置永久生效”。当你重装 WSL、重置发行版、或手动删过 docker-desktop-data 卷后,这些共享路径配置会丢失,但界面不会提醒你。每次遇到挂载异常,第一反应不该是改 Docker 命令,而是打开 Settings → File Sharing 确认勾选状态。


















