2

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

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

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

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

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

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

在此先感谢您的帮助

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

4

1 回答 1

2

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

sudo systemctl restart docker

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

提示这个答案,以引导我走上正确的道路。

于 2021-02-09T22:37:46.533 回答