Docker 18.03版本下WSL中容器挂载卷失败问题求助
Docker v18.03后WSL卷挂载失效的解决方案
我之前也碰到过完全一样的问题,Docker 18.03版本更新后,原来手动绑定挂载/mnt/c到/c的方法突然不好使了,折腾了好一阵才找到几个可行的解决办法,你可以挨个试试:
1. 放弃手动绑定,用WSL自动挂载功能
Docker 18.03之后对WSL的集成逻辑有调整,手动mount --bind的方式容易和自动挂载冲突:
- 先取消之前的手动挂载:
sudo umount /c sudo rm -rf /c # 如果这个目录是你手动创建的 - 编辑或创建
/etc/wsl.conf,确保配置如下:[automount] enabled = true root = / options = "metadata,umask=0000" mountFsTab = false - 关闭所有WSL终端窗口,在Windows PowerShell里执行
wsl --shutdown重启WSL,之后Windows的C盘会自动挂载到/c,不用再手动绑定。
2. 检查路径类型是否匹配
你的错误提示里明确提到Are you trying to mount a directory onto a file (or vice-versa),这是最常见的问题:
- 确认主机上的
/c/Users/quantik/app/nginx.conf是文件还是目录:如果是文件,容器内的/etc/nginx/nginx.conf也必须是文件(不能是目录);如果是目录,容器内的目标路径也得是目录。 - 举个例子:如果你的主机路径是单个配置文件,容器内的目标路径不能是一个已存在的目录,否则就会触发这个错误。
3. 换用WSL原生路径或Windows路径格式
有时候换个路径写法就能解决问题:
- 直接用WSL默认的
/mnt/c/...路径:docker run -t image_name:latest -v /mnt/c/Users/quantik/path/to/volume:/path/in/container - 或者用Windows风格的绝对路径(适合Docker Desktop WSL2后端):
docker run -t image_name:latest -v C:/Users/quantik/path/to/volume:/path/in/container
4. 重置Docker的WSL集成
如果上面的方法都没用,试试重置Docker和WSL的关联:
- 打开Docker Desktop,进入「Settings」→「Resources」→「WSL Integration」
- 取消勾选你正在使用的WSL发行版,点击「Apply & Restart」
- 重启完成后,再重新勾选该发行版,再次点击「Apply & Restart」
另外,如果你是用docker-compose部署的,一定要检查compose文件里的路径配置,确保主机路径和容器路径的类型完全匹配,比如挂载单个文件时可以加上只读标识避免权限问题:
services: frontend: image: image_name:latest volumes: - /c/Users/quantik/app/nginx.conf:/etc/nginx/nginx.conf:ro
内容的提问来源于stack exchange,提问作者quantik
相关产品推荐
相关产品推荐

