Docker挂载本地文件夹后容器内目录为空的问题求助
结合你的环境(Windows 10 1709 + WSL Ubuntu 18.04 + Docker 2.0.0.2)和操作情况,我来帮你一步步排查这个挂载后目录为空的问题:
1. 确认WSL使用的是Windows端的Docker客户端
如果你的WSL里单独安装了Docker服务,它是无法直接访问Windows文件系统的,必须使用Windows Docker提供的客户端。在WSL终端执行:
which docker
如果输出是类似 /mnt/c/Program Files/Docker/Docker/resources/bin/docker 的路径,说明你用的是Windows端的Docker,没问题;如果是 /usr/bin/docker,那你需要停用WSL里的Docker服务,改用Windows的Docker客户端(可以把WSL里的Docker卸载,或者临时停止服务:sudo service docker stop)。
2. 验证WSL能否访问目标目录内容
在WSL里执行:
ls -la /mnt/c/code/bitbucket/my-api
如果这里看不到文件,那问题出在WSL和Windows文件系统的交互上:
- 检查Windows文件夹是否被加密(右键文件夹→属性→高级,看“加密内容以便保护数据”是否勾选),如果是,WSL无法访问加密文件;
- 检查Windows用户对该文件夹的权限,确保当前用户有读写权限;
- 尝试重启WSL(关闭所有WSL终端,执行
wsl --shutdown再重新打开)。
如果WSL里能看到文件,但容器里看不到,继续往下排查。
3. 重置Docker的文件共享配置
这是最常见的解决方法,Docker的共享权限经常会出现缓存失效:
- 打开Docker for Windows设置界面,切换到Shared Drives标签;
- 先取消C盘的勾选,点击Apply,等待设置生效;
- 重新勾选C盘,输入你的Windows用户名和密码(注意如果是微软账户,用户名是邮箱前缀,本地账户直接输用户名),再点击Apply;
- 重启Docker服务(设置界面右上角的Restart按钮)。
4. 测试挂载时指定权限或使用简单命令验证
有时候容器内的权限会导致文件不可见,你可以尝试挂载时显式指定读写权限,或者直接用命令列出目录内容:
在WSL里执行:
docker run -it -v /c/code/bitbucket/my-api:/var/my-api:rw centos:7 ls -la /var/my-api
如果这个命令能列出文件,说明之前进入容器后没看到是终端缓存或者其他临时问题;如果还是空,继续下一步。
5. 检查Docker版本兼容性
你的Docker版本2.0.0.2比较老,和Windows 10 1709可能存在一些兼容性问题。如果上面的方法都无效,可以尝试升级Docker到较新的稳定版(注意备份镜像和容器),新版本对WSL的支持更好。
另外,你提到指定不存在的目录会报错,说明Docker能正确识别路径,只是无法读取目录内容,核心问题还是文件共享的权限或配置失效,优先尝试重置共享配置和验证WSL的文件访问权限。
内容的提问来源于stack exchange,提问作者Damo




