Windows 10上的Docker在启用VPN时无法挂载卷。

3

我发现在Windows 10上运行Docker时,挂载本地卷存在问题。只有当我开启公司VPN时才会出现这些问题。

C:\Users\matt> docker run --rm -v d:/tmp:/data alpine ls /data
my_local_test_file.txt

连接 VPN 后,我会看到这个:

C:\Users\matt> docker run --rm -v d:/tmp:/data alpine ls /data
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: error while creating mount source path '/host_mnt/d/tmp': mkdir /host_mnt/d: file exists.

Docker版本为17.12.0-ce-win47。

我认为问题在于Docker在挂载本地卷时使用了网络,而VPN通过VPN网关路由了所有的网络流量,因此Docker无法访问本地驱动器。

是否有解决这个问题的方法?

我知道我可以在Linux虚拟机中运行Docker,或者使用Docker工具箱。但这些选项都不是特别好。

是否有其他可能的解决方法?

1个回答

3

VPN路由所有网络流量通过VPN网关

你可能是对的,这样一来,从Docker客户端到Docker守护程序的所有流量也将通过VPN。当你在Windows上使用Docker CLI时,它会连接到通过网络可访问的Docker守护程序。使用VPN可能会干扰这种机制。

我认为正在发生的是:

  • 禁用VPN时,你使用你计算机上的Docker守护程序,一切正常
  • 启用VPN时,另一个Docker守护程序被使用,因为你的VPN重定向了发往你的Docker主机的流量(默认情况下为127.0.0.1或通过-H标志或DOCKER_HOST环境变量设置)。这意味着 VPN 网络中存在该 IP 或主机,并且有一个正在监听它的 Docker 守护程序(这有点奇怪,不过使用该守护程序可能存在风险)
如果这确实发生了,你肯定会看到来自 docker ps -adocker images 等的不同输出,因为你正在连接到不同的守护程序。(通过你的 VPN 访问的守护程序实际上是由其他人拥有的,你最好不要使用它!)
你可以做以下事情: 不要通过你的 VPN 路由 127.0.0.1(或任何配置为 Docker 主机的 IP 地址) 需要采取的操作将取决于你使用的 VPN 软件,或者你可以在 Windows 机器上直接添加路由(这里是一篇关于此主题的好文章)。 找出启用 VPN 时的 IP 地址,并配置守护程序以侦听此 IP
  • 当VPN启用时,请运行ipconfig /all,找到VPN使用的接口及其IP地址,例如10.142.0.12(您可以比较启用VPN前/后的输出以确定它是哪个)
  • 将Docker守护程序配置为侦听此IP地址并重新启动。要么使用UI, 要么在Windows上配置文件默认位于%programdata%\docker\config\daemon.json,例如需要指定"hosts": ["10.142.0.12", "127.0.0.1"]详细信息请参见文档
  • 当VPN启用时,请将Docker主机配置为10.142.0.12,可以通过设置环境变量DOCKER_HOST=10.142.0.12或使用客户端docker -H 10.142.0.12 <cmd>来完成

/!\ 安全提示:这可能会带来安全问题,因为任何知道您在VPN网络上的IP地址的人都可以在您的计算机上使用Daemon。


希望这能有所帮助。我不是Windows专家,所以无法提供与Windows相关的详细信息,但如果需要,可以随时询问详情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接