R·ex / Zeng


音游狗、安全狗、攻城狮、业余设计师、段子手、苦学日语的少年。

Docker for Windows 无法共享磁盘的问题

TL;DR: 解决方案在 文章末尾

之前为了开发方便,我一直在用 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 也可以共享分区了……

版权声明:除文章开头有特殊声明的情况外,所有文章均可在遵从 CC BY 4.0 协议的情况下转载。

这是我们共同度过的

第 1482 天