Windows(WSL2)下Docker Compose卷挂载报错:文件或目录不存在
WSL2 + Docker Desktop 挂载主机目录到Docker卷失败解决方案
问题背景
在Windows 11的WSL2(Ubuntu)环境中使用Docker Desktop,执行docker compose up时出现挂载失败错误,提示目标目录不存在,但实际目录已存在且权限设为777。该项目在MacOS上可正常运行。
环境信息
- Docker Desktop版本:
4.26.1 (131620),引擎版本:24.0.7 - 项目路径:WSL2原生路径
/home/user/projects/composer - 卷目录:
/home/user/projects/composer/docker-volumes
错误信息
Error response from daemon: failed to mount local volume: mount /home/user/projects/composer/docker-volumes/local-mongo-data:/var/lib/docker/volumes/composer_local-mongo-data/_data, flags: 0x1000: no such file or directory
解决方案
1. 检查Docker Desktop的WSL集成配置
打开Docker Desktop设置:
- 进入
Resources > WSL Integration - 确保当前使用的Ubuntu发行版已开启集成,同时勾选
Enable integration with my default WSL distro - 应用设置后重启Docker Desktop
2. 修正Docker Compose卷配置
推荐直接在服务中使用bind挂载,替代named volume的driver_opts配置,避免路径解析问题:
services: # mongo服务示例 mongo: image: mongo:latest # ...其他服务配置 volumes: - ./docker-volumes/local-mongo-data:/var/lib/mongodb # rabbitmq服务示例 rabbitmq: image: rabbitmq:management volumes: - ./docker-volumes/local-rabbit-data:/var/lib/rabbitmq # redis服务示例 redis: image: redis:latest volumes: - ./docker-volumes/local-redis-data:/data # 移除原有的named volumes定义 # volumes: # local-rabbit-data: # ...
若坚持使用named volume,需确保路径变量解析正确:
volumes: local-mongo-data: driver_opts: type: none device: ${PWD}/docker-volumes/local-mongo-data o: bind
执行echo $PWD确认当前目录为项目根目录/home/user/projects/composer,若不是则切换到该目录再执行docker compose up。
3. 清理旧卷并重建目录
执行以下命令重置卷状态(注意备份数据):
# 停止服务并删除旧卷 docker compose down -v # 清空卷目录 rm -rf ./docker-volumes/* # 重建目录并设置权限 mkdir -p ./docker-volumes/local-mongo-data ./docker-volumes/local-rabbit-data ./docker-volumes/local-redis-data chmod -R 777 ./docker-volumes/ # 重新启动服务 docker compose up -d
4. 避免使用Windows挂载目录
确保项目位于WSL2原生文件系统(/home/user/...),不要放在/mnt/c/等Windows挂载目录下,这类目录存在性能和权限兼容性问题,易导致Docker挂载失败。
内容的提问来源于stack exchange,提问作者Ismail Gül
相关产品推荐
相关产品推荐

