Docker Compose构建失败:报'unable to prepare context: unable to evaluate symlinks in context path: The system cannot find the path specified'错误
我完全懂你这种头疼的感觉——重装Docker本来就够折腾了,结果又遇到这种摸不着头脑的错误,而且直接用docker build明明没问题,偏偏docker compose就掉链子。结合你提到的WSL问题、杀毒软件干扰这些背景,我来给你一步步排查解决:
先确认命令执行的工作目录
你用的是build: .,意味着Docker Compose会把当前执行命令的目录作为构建上下文。先确保你是在docker-compose.yml所在的同一个文件夹里执行docker compose up -d --build的。如果是在WSL终端里执行,还要确认你是不是进入了正确的WSL挂载路径(比如你的Dev Drive在WSL里是/mnt/d/your-project这种,别在Windows的C:\路径下用WSL命令执行)。检查WSL集成的状态
你提到WSL老是出问题,这大概率是核心原因之一:- 打开Docker Desktop的设置,找到
Resources > WSL Integration - 确保你正在使用的WSL发行版(比如Ubuntu)是开启状态
- 先关掉所有WSL集成,点击应用,再重新开启,然后重启Docker Desktop
- 打开WSL终端,执行
wsl --shutdown,再重新打开WSL,试试重新构建
- 打开Docker Desktop的设置,找到
明确指定构建上下文和Dockerfile路径
虽然你直接docker build没问题,但Docker Compose有时候对路径的解析会更严格。修改你的docker-compose.yml,明确指定上下文和Dockerfile:services: api: build: context: . dockerfile: Dockerfile这样可以避免Compose自动查找时的路径歧义,尤其是Windows和WSL路径交互时的符号问题。
排查符号链接(symlink)的问题
错误提示里提到了evaluate symlinks,说明Compose在扫描构建上下文时遇到了无效的符号链接:- 如果是在Windows里,打开命令行,进入项目目录,执行
dir /a:l查看有没有符号链接,删掉或者修复那些指向不存在路径的链接 - 如果是在WSL里,执行
ls -la找带l标记的文件,同样处理掉无效的symlink
- 如果是在Windows里,打开命令行,进入项目目录,执行
彻底排除杀毒软件的干扰
你提到过有 aggressive anti-malware,哪怕移到了Dev Drive,还是可能拦截Docker Compose的上下文扫描:- 临时关闭杀毒软件,或者把你的项目目录、Docker Desktop的安装目录(
C:\Program Files\Docker)、WSL的挂载路径(比如\\wsl$\Ubuntu\home\your-user\project)加入白名单 - 之后再试
docker compose build,如果成功了,就说明是杀毒软件的锅,保持白名单即可
- 临时关闭杀毒软件,或者把你的项目目录、Docker Desktop的安装目录(
检查Docker Compose的版本兼容性
重装Docker后,可能出现独立版docker-compose.exe和Docker Desktop集成版docker compose冲突的情况:- 执行
docker compose version,看看版本是否和Docker Desktop的版本一致 - 如果用的是旧的
docker-compose(带横杠的),换成docker compose(无横杠,Docker Desktop自带的集成版)再试
- 执行
终极方案:重置Docker Desktop到出厂设置
如果上面的方法都没用,可能是Docker的配置残留导致的:- 打开Docker Desktop,进入
Troubleshoot页面 - 点击
Reset to factory defaults(注意:这会清空所有本地镜像、容器,记得备份需要的内容) - 重置后重新开启WSL集成,配置好路径,再尝试构建
- 打开Docker Desktop,进入
从你docker build正常的情况来看,问题肯定不是Dockerfile或者代码本身的问题,而是Docker Compose和WSL/Windows路径交互、权限或者集成的问题,按上面的步骤一步步试,应该能解决。




