1. 程式人生 > >從Windows 10共享資料夾給Docker虛擬機器中的Docker的神奇bug

從Windows 10共享資料夾給Docker虛擬機器中的Docker的神奇bug

一,回顧

這篇文章是基於之前釋出的指令碼
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的某個安全策略有關,也許是我的行動硬碟有關,以後有了對比的條件後再記錄。