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
相关产品推荐
相关产品推荐

