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

时间:2020-07-15 07:41:42

标签: docker vpn openconnect

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

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

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

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

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

注意:使用--net="host"运行容器会导致主机和容器都能够访问VPN,但是我想避免使用此选项,因为我最终将进行docker compose部署,该部署要求所有容器都在其中运行桥接模式。

预先感谢您的帮助

编辑:我发现这是DNS问题,因为即使VPN连接似乎出现故障,我也可以ping与server1.vpn-remote.com对应的IP。我正在阅读有关使用Docker和Docker Compose进行DNS管理以及它们对主机的/etc/resolv.conf文件的用法的文档。

1 个答案:

答案 0 :(得分:2)

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

sudo systemctl restart docker

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

感谢 this answer 指导我走正确的道路。