欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-11 18:15:19
...

一,回顾

这篇文章是基于之前发布的脚本
http://blog.csdn.net/hu_zhenghui/article/details/79087151
不过在更多的设备上测试的时候,发现时灵时不灵,为了排查问题,花了很多时间,走了很多弯路,把这些经验做个总结,希望当您遇到类似的问题的时候可以节约时间。

二,测试环境

设备 CPU OS 其他
Surface Pro 3 X86_64 Windows 10 在Hyper-V上安装有Docker虚拟机
Surface Pro 1 X86_64 Windows 10 在Hyper-V上安装有Docker虚拟机
Macbook Air X86_64 Mac OS X
NAS ARM Embeded 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的某个安全策略有关,也许是我的移动硬盘有关,以后有了对比的条件后再记录。