You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker挂载本地文件夹后容器内目录为空的问题求助

解决Docker for Windows挂载本地目录为空的问题

结合你的环境(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的共享权限经常会出现缓存失效:

  1. 打开Docker for Windows设置界面,切换到Shared Drives标签;
  2. 先取消C盘的勾选,点击Apply,等待设置生效;
  3. 重新勾选C盘,输入你的Windows用户名和密码(注意如果是微软账户,用户名是邮箱前缀,本地账户直接输用户名),再点击Apply
  4. 重启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

火山引擎 最新活动