Windows宿主机路径必须用正斜杠(如C:/mydata),禁用反斜杠,否则Docker Desktop会将m等误解析为转义序列导致挂载失败;容器内路径须为绝对路径(如/app),且大小写需与Linux文件系统严格一致。

Windows宿主机路径必须用正斜杠/,不能用反斜杠
Windows原生路径如C:mydata直接传给docker run -v会失败,Docker Desktop解析时会把m当成转义序列(比如
、 ),导致路径截断或报错invalid volume specification。它不关心你本地资源管理器怎么显示,只按POSIX风格解析挂载参数。
正确写法只有两种:C:/mydata 或 D:/project。注意:
- 驱动器字母后紧跟
/,不是:\也不是:// - 路径中含空格或中文(如
C:/我的项目)可直接用,无需引号 - 不要写成
C://mydata——多一个/在某些旧版Docker Desktop里可能触发WSL2内核路径解析异常
容器内路径必须是绝对路径,且以/开头
很多人卡在-v C:/data:app这种写法上,报错mount path must be absolute。Docker要求容器侧路径必须从根开始,比如/app、/var/log,不能是相对路径。
常见错误示例与修正:
- 错:
-v C:/logs:logs→ 对:-v C:/logs:/logs - 错:
-v D:/conf:etc/nginx→ 对:-v D:/conf:/etc/nginx - 错:
--mount type=bind,source=C:data,target=work→ 对:--mount type=bind,source=C:/data,target=/work
别用/host_mnt/c/这类路径写-v参数
/host_mnt/c/xxx是容器内部看到的宿主机路径(WSL2底层映射结果),只在容器里ls /host_mnt/c时有用。你在Windows命令行或PowerShell里执行docker run -v时,source部分永远要填宿主机真实路径格式,即C:/xxx。
混淆这点会导致两个问题:
- 写
-v /host_mnt/c/mydata:/app:Docker Desktop找不到该路径,报No such file or directory - 写
-v C:/mydata:/host_mnt/c/mydata:容器内出现嵌套挂载,实际数据落不到预期位置
路径大小写敏感性取决于目标镜像,不是Windows本身
Windows文件系统默认不区分大小写,但容器运行的是Linux内核,其ext4/xfs文件系统严格区分大小写。这意味着:
- 宿主机有
C:/MyData,你写-v C:/mydata:/app仍能挂载成功(Windows层允许) - 但进容器后
ls /app可能为空——因为实际目录名是MyData,而mydata在Linux视角下是另一个不存在的路径 - 更隐蔽的问题:某些Alpine镜像里的工具(如
sh脚本)对路径大小写敏感,cd /APP会失败,而cd /app才对
所以最稳妥的做法是:宿主机路径命名保持全小写,-v参数里也严格一致,避免跨系统语义漂移。


















