從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的某個安全策略有關,也許是我的行動硬碟有關,以後有了對比的條件後再記錄。