太長不看:解決方案在 文章末尾。
之前為了開發方便,我一直在用 Docker for Windows 作為我的開發環境。但突然有一天,Docker 突然無法在 Shared Drives 裡面共享磁碟了,會報一句這樣的提示:
A firewall is blocking file Sharing between Windows and the containers. See documentation for more info.看起來是防火牆的問題。我知道 Docker for Windows 是使用了 Windows 的 SMB 來操作本地磁碟上的檔案,於是我檢查了系統的防火牆設定,發現不管是 445 埠還是 SMB 服務(甚至是 Docker SMB 服務)都沒有被攔截,甚至在我關閉防火牆之後問題依舊存在。
Docker 官方文件 中說,如果防火牆規則看起來沒問題,那你可能需要為 Hyper-V 的網路介面卡停用再啟用(或者直接重灌)它的“檔案和印表機共享”服務。然而停用再啟用之後依舊,最新的 Windows 10 也不允許解除安裝系統自帶的服務(會報 0x80071779 錯誤),一時陷入江局。
馬上要放假了,我在年後又用年假請了好幾天,但我現在負責的專案後端絕大部分程式碼是我寫的,所以如果年後出了什麼問題,可能會找到我,所以我需要帶一臺能寫程式碼的電腦回去。我們公司的程式碼倉庫是內網搭建的 Gitlab,但是自從某一天起,我自己的電腦突然沒法訪問了(公司電腦在外面連上公司 VPN 不存在該問題),同樣無法訪問的是公司內網的其它 VPS,但 JIRA 和 Confluence 都可以繼續訪問。經過排查,Host 檔案和 DNS 不存在異常,路由表也沒有問題,ping 命令直接提示“一般故障”,tracert 命令也追不到任何節點。
解決方案
最後,我發現所有不能訪問的 IP 都是 10.2.x.x/22 這種真正的內網 IP,JIRA 和 Confluence 其實還是外網的 IP。於是我又想到了 Docker for Windows 的問題,因為它本質上也是從你的機器訪問一個內網 IP(10.0.75.2),所以肯定在哪個地方有一個防火牆阻攔了連線。於是我運行了一遍網路診斷,得到的結果只有“防火牆阻止了訪問”。
最後我將日誌仔細地看了一遍,發現了一個意料之外的事情:我電腦上的 NordVPN 開了一個防火牆。
開啟 NordVPN,在選項裡面依次尋找,最後發現了這樣一個選項:Invisibility on LAN,它的作用是讓你的電腦從 LAN 上面隱藏,所以可能是它開了這個防火牆?於是我把這個選項關掉,發現內網 Gitlab 可以上了,Docker for Windows 也可以共享分割槽了……