You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose挂载命名卷报错:No Such File or Directory

解决Docker Compose绑定挂载命名卷时的路径错误问题

看起来你遇到的问题是Docker无法正确解析你指定的绑定挂载路径,在Windows 10的Docker环境下,这类路径问题很常见,下面是几个可以尝试的解决方案:

1. 替换环境变量为明确的Linux风格绝对路径

你的命名卷sites中使用了${PWD}/sites作为device路径,但在Windows环境下,${PWD}的解析可能不符合Docker的预期(比如Windows风格路径F:\Documents无法被Docker正确识别)。你可以直接替换为Docker能识别的Linux格式路径:

volumes:
  sites:
    driver: local
    driver_opts:
      type: bind
      o: bind
      device: /mnt/f/Documents/sites

这样直接指定绝对路径,避免环境变量解析带来的问题。

2. 检查当前Shell的环境变量解析

如果你坚持使用环境变量,需要确认当前Shell(CMD/PowerShell)对${PWD}的输出是否正确:

  • 在PowerShell中,运行echo ${PWD},应该输出类似/mnt/f/Documents的Linux风格路径(如果启用了WSL集成),如果输出的是Windows路径(F:\Documents),那Docker无法识别,你可以改用$($PWD.Path -replace '\\','/')来转换路径格式,或者直接在docker-compose.yml里保留device: ${PWD}/sites,然后在PowerShell中执行:
$env:PWD = "/mnt/f/Documents"
docker-compose up -d

手动设置正确的环境变量值。

3. 确认Docker文件共享的状态

虽然你提到已经共享了F盘,但有时候共享设置可能没有生效:

  • 打开Docker Desktop设置 -> Resources -> File Sharing,确认F盘已经勾选,并且点击Apply & Restart重启Docker服务。
  • 检查F盘的F:\Documents\sites目录权限,确保当前用户有读写该目录的权限,Docker需要足够的权限来挂载该目录。

4. 考虑改用直接绑定挂载而非命名卷

如果只是需要挂载本地./sites目录到容器的/var/www/html/sites,其实可以不用命名卷,直接在web服务的volumes里写:

services:
  web:
    # ...其他配置
    volumes:
      - ./sites:/var/www/html/sites

这种方式更简单,也能避免命名卷的bind配置带来的路径解析问题,在Windows环境下兼容性更好。

额外检查:db服务的挂载配置

你的db服务里挂载了.:/var/www/html,这在Windows下同样可能遇到路径问题,建议也按上面的方式检查路径是否正确,或者替换为明确的Linux风格路径。

内容的提问来源于stack exchange,提问作者Nicholas Moore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:50:05