您的位置:首页 > 运维架构 > Docker

从Windows 10共享文件夹给Docker虚拟机中的Docker的神奇bug

2018-01-25 18:23 816 查看

一,回顾

这篇文章是基于之前发布的脚本

http://blog.csdn.net/hu_zhenghui/article/details/79087151

不过在更多的设备上测试的时候,发现时灵时不灵,为了排查问题,花了很多时间,走了很多弯路,把这些经验做个总结,希望当您遇到类似的问题的时候可以节约时间。

二,测试环境

设备CPUOS其他
Surface Pro 3X86_64Windows 10在Hyper-V上安装有Docker虚拟机
Surface Pro 1X86_64Windows 10在Hyper-V上安装有Docker虚拟机
Macbook AirX86_64Mac OS X
NASARMEmbeded Linux提供CIFS服务

三,成功的用例

之前发布的脚本是在Surface Pro 1上共享文件夹给Surface Pro 1上Docker虚拟机,测试成功,也就没有想到会有什么问题

四,发现问题

使用同样的脚本在Surface Pro 3上共享文件夹给Surface Pro 1上Docker虚拟机,失败。

Docker虚拟机的版本相同

Surface Pro 3和Surface Pro 1都是Windows 10自动更新的

五,更多的测试

访问来源访问目标结果
Surface Pro 3访问Surface Pro 1上的共享文件夹成功
Surface Pro 3访问NAS上的CIFS文件夹成功
Surface Pro 1访问Surface Pro 3上的共享文件夹成功
Surface Pro 1访问NAS上的CIFS文件夹成功
Macbook Air访问Surface Pro 3上的共享文件夹成功
Macbook Air访问Surface Pro 1上的共享文件夹成功
Macbook Air访问NAS上的CIFS共享文件夹成功
Surface Pro 3中的Docker虚拟机mount NAS上的CIFS共享文件夹成功
Surface Pro 1中的Docker虚拟机mount NAS上的CIFS共享文件夹成功
Surface Pro 3中的Docker虚拟机mount Surface Pro 1上的共享文件夹成功
Surface Pro 1中的Docker虚拟机mount Surface Pro 1上的共享文件夹成功
Surface Pro 3中的Docker虚拟机mount Surface Pro 3上的共享文件夹失败
Surface Pro 1中的Docker虚拟机mount Surface Pro 3上的共享文件夹失败

六,分析

很显然,只有两种情况失败,都和Surface Pro 3有关,上网搜索。

强调一下,上网搜索可能是捷径,也可能被误导。

看到的信息比较多的谈论SMB协议的版本问题,也就是说Linux只能访问较低版本,而Windows出于已知的安全隐患禁止了SMB协议的较低版本。

在这个方向上的调查浪费了很多时间……

七,柳暗花明

在网上和咨询专家获得的各种思路都尝试了一下,没有收获,最后在整理文档的时候,偶然发现了一个可行的情况。

Surface Pro 3上有两个盘,一个是系统盘C,一个是数据盘D,一直在数据盘D上做实验,整理文档的时候,把代码移动到了系统盘C上的OneDrive文件夹,顺手实验了一下,就成功了!!!

为了验证,构建测试用例如下

创建用户userc

创建用户userd

在系统盘C的根目录中创建文件夹 C:/sharec,设置用户userc具有完全控制权限,共享为文件夹sharec,设置共享权限为userc具有完全控制权限。

在数据盘D的根目录中创建文件夹 D:/shared,设置用户userd具有完全控制权限,共享为文件夹shared,设置共享权限为userd具有完全控制权限。

进入Docker虚拟机的命令行界面。

创建加载文件夹/mntc

mkdir /mntc


创建加载文件夹/mntd

mkdir /mntd


加载前面共享的sharec

mount -t cifs //192.168.1.58/sharec /mntc -o username=userc,password=userc


成功

创建文件

touch /mntc/test.txt


成功

加载前面共享的shared

mount -t cifs //192.168.1.58/shared /mntd -o username=userd,password=userd


报错

mount: mounting //192.168.1.58/shared on /mntd failed: Input/output error


后续又尝试把shared的权限改成和sharec相同,也不成,也许是Windows 10的某个安全策略有关,也许是我的移动硬盘有关,以后有了对比的条件后再记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息