繁体   English   中英

启用 VPN 时,Windows 10 上的 docker 无法挂载卷

[英]docker on windows 10 can't mount volumes when VPN enabled

在 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 VM 中运行 docker,或者使用 docker 工具箱。 这两个都不是特别好。

还有另一种可能的解决方法吗?

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

您可能是对的,在这种情况下,从 Docker 客户端路由到 Docker 守护程序的所有流量也将通过 VPN。 当您在 Windows 上使用 Docker CLI 时,它将连接到可通过网络访问的 Docker 守护程序。 使用 VPN 可能会破坏这种机制。

我认为正在发生的事情是:

  • 当 VPN 被禁用时,你在你的机器上使用 Docker 守护进程,一切正常
  • 启用 VPN 后,将使用另一个 Docker 守护程序,因为您的 VPN 重定向流量寻址到您的 Docker 主机(默认为127.0.0.1或通过-H标志或DOCKER_HOST变量设置)。 这意味着这个 IP 或主机以某种方式存在于您的 VPN 网络上,并且有一个 Docker 守护进程在监听它(这有点奇怪,使用该守护进程可能有风险)

如果这真的发生了,您肯定会看到docker ps -adocker images等的不同输出,因为您连接到不同的守护进程。 (通过您的 VPN 访问的守护进程实际上是由其他人拥有的,您最好不要使用它!)

你可以做什么:

不要通过你的 VPN 路由 127.0.0.1(或任何配置为 Docker 主机的东西)

采取的行动取决于您使用的 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_HOST=10.142.0.12或使用客户端docker -H 10.142.0.12 <cmd> Docker 主机配置为10.142.0.12

/!\\ 安全注意事项:这可能会带来安全问题,因为任何知道您在 VPN 网络上的 IP 的人都可以在您的机器上使用守护程序


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM