docker - 无法使 Docker 容器使用 OpenConnect VPN 连接

标签 docker vpn openconnect

我有一个运行 Ubuntu 16.04 的虚拟机,我想在其上部署一个打包为 Docker 容器的应用程序。应用程序需要能够向 VPN 下的服务器执行 HTTP 请求(例如 server1.vpn-remote.com)

我成功配置了主机 VM,以便通过 openconnect 连接到 VPN,我可以使用 systemd 服务打开/关闭此连接。

不幸的是,当我运行 docker run mycontainer 时,主机和容器都无法访问 server1.vpn-remote.com。奇怪的是,VPN 连接服务日志中没有显示错误,而是卡在确认连接成功的 openconnect 消息中。

如果我在启动 mycontainer 后重新启动 VPN 连接,主机可以访问 server1.vpn-remote.com,但不能访问容器。此外,如果我在 mycontainer 或任何其他容器上发出任何命令,如 docker run/start/stop/restart,即使主机的连接也会再次中断。

注意:我已经检查了 ip 路由,Docker 和 VPN 子网之间似乎没有冲突。

注意:使用 --net="host" 运行容器会导致主机和容器都能够访问 VPN,但我想避免使用此选项,因为我最终会制作一个 docker组合部署,要求所有容器以桥接模式运行。

预先感谢您的帮助

编辑:我发现这是一个 DNS 问题,因为我能够 ping 对应于 server1.vpn-remote.com 的 IP,即使在 VPN 连接似乎失败后也是如此。我正在阅读有关使用 Docker 和 Docker Compose 进行 DNS 管理以及它们对主机的 /etc/resolv.conf 文件的使用的文档。

最佳答案

希望六个月后您不再需要帮助!有些细节不同,但这听起来有点像我遇到的问题。就我而言,解决方案有点令人失望:连接到 VPN 后,重新启动 docker 守护进程:

sudo systemctl restart docker

我在这里做了一些推断,但看起来,当守护进程启动时,它会根据当时的网络状态做出一些决定/配置。就我而言,守护进程在我启动时启动。毫不奇怪,当我启动时,我还没有机会连接到 VPN。因此,我的容器流量(包括 DNS 查找)直接通过我的网络。

this answer 致敬引导我走上正确的道路。

关于docker - 无法使 Docker 容器使用 OpenConnect VPN 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62909875/

相关文章:

c# - 将私有(private) VPN 中托管的服务引用添加到我的项目

python - 如何在 Python 中使用 VPN 进行网页抓取?

azure - 在 Azure B2C 中使用 OpenId Connect 面临本地帐户用户的登录问题

nginx - kubernetes liveness探针重新启动以CrashLoopback结尾的Pod

google-app-engine - Bitbucket Pipeline Deploy 问题到 Google App Engine

asp.net-mvc - 与Razor捆绑在一起时,Dockerized的ASP.NET MVC5引发COMException

angular - 从docker ui容器调用到api容器

仅 VPN 网站上的 Java HTTP 请求

openssl - Openconnect 无法连接到网关

docker - 如何在docker-compose.yml中添加包含字母和数字的环境变量?