WSL2环境下执行docker-compose up --build报unable to prepare context错误
问题原因
报错里出现\\wsl$\开头的Windows UNC路径,本质是Docker的构建上下文路径识别异常,常见触发原因有两个:
- 你在Windows端的终端(CMD/PowerShell)执行docker-compose命令,Windows自动将WSL内的项目路径转换为UNC格式,Linux版Docker引擎无法识别该路径格式
- Docker Desktop的WSL2集成未正确开启,导致Docker无法直接读取WSL2内的文件系统
解决方案
按以下步骤逐一排查即可解决:
- 首先确认执行命令的终端环境
必须在WSL2的Ubuntu-20.04终端内执行所有docker相关命令,执行pwd确认当前路径输出为/home/vendasky/Projects/sql-gui这类Linux标准路径,不要在Windows终端中操作WSL内的Docker项目。 - 开启Docker Desktop的WSL2集成
打开Docker Desktop设置面板,依次进入「资源」-「WSL集成」,打开Ubuntu-20.04对应的集成开关,修改后重启Docker Desktop生效。 - 修正docker-compose.yaml配置冲突
你当前的php服务同时配置了build和image字段,会导致镜像命名冲突,删除image: php:fpm行即可,修改后配置如下:php: build: context: . dockerfile: Dockerfile volumes: - ./src:/src networks: - code-network - 清理缓存重新构建
执行以下命令清理历史容器缓存后重新构建:docker-compose down -v docker-compose up --build
额外优化建议
你当前mariadb的挂载路径直接用了根目录下的/var/lib/mysql,WSL2内建议改成项目内的相对路径,避免跨文件系统的权限和性能问题,修改示例:
volumes: - ./mariadb/data:/data - ./mariadb/logs:/logs - ./mariadb/conf:/etc/mysql
内容的提问来源于stack exchange,提问作者Václav Pavlíček
相关产品推荐
相关产品推荐

