升级Win10后Docker for Windows挂载卷仅含文件夹无文件求助
解决Hyper-V Docker Machine卷挂载仅显示文件夹无文件的问题
我之前从Docker Toolbox转用Hyper-V的Docker Machine时,也碰到过一模一样的问题——hello-world跑起来没问题,但挂载卷就只出文件夹,文件死活看不到,还没任何报错,简直摸不着头脑!下面是我试过的几个有效解决方法,你可以挨个试试:
检查挂载路径的格式是否正确
Windows本地路径在Docker命令里不能直接用Windows的反斜杠,得换成正斜杠或者转义反斜杠。比如你要挂载C:\dev\my-app,正确的写法应该是:docker run -v /c/dev/my-app:/app <image-name> # 或者用转义反斜杠 docker run -v C:\\dev\\my-app:/app <image-name>另外要注意,Hyper-V的Docker Machine默认只能访问
C:盘的文件,如果你的文件在其他盘符,需要额外配置共享。确认Hyper-V虚拟机的文件共享权限
- 打开Hyper-V管理器,找到你的Docker Machine虚拟机(一般叫
default),右键选择「设置」; - 左侧菜单选「集成服务」,确保「文件共享」是勾选启用的;
- 回到Windows本地,找到你要挂载的文件夹,右键「属性」->「共享」,添加「Everyone」用户并赋予读写权限(测试阶段可以这么弄,之后再改回更严格的权限)。
- 打开Hyper-V管理器,找到你的Docker Machine虚拟机(一般叫
重新创建Docker Machine并指定共享目录
如果之前的虚拟机配置有问题,干脆删掉重建,创建时直接指定要共享的目录,避免后续麻烦:# 先删掉旧的虚拟机 docker-machine rm default # 创建新的虚拟机,同时共享C盘的指定目录 docker-machine create -d hyperv --hyperv-share c:/dev default这样创建的虚拟机自动把
C:\dev共享到虚拟机内的/dev路径,挂载时直接用/dev/my-app就行。检查容器内的文件权限
有时候文件已经挂载成功,但容器内的运行用户没有读取权限。你可以进入容器查看:docker exec -it <你的容器ID> bash # 查看挂载目录的权限 ls -l /app如果权限不对,可以在启动容器时加上
--user root参数,临时用root用户运行,或者调整本地文件的权限,让Hyper-V能正常读取。验证Docker Machine内的共享状态
用命令进入Docker Machine虚拟机,检查共享目录是否正常挂载:docker-machine ssh default # 查看C盘的共享内容 ls /mnt/c/dev如果这里看不到本地的文件,说明Hyper-V的共享没生效,得回到Hyper-V管理器重新配置共享。
内容的提问来源于stack exchange,提问作者Marien
相关产品推荐
相关产品推荐

