无法使 Docker 容器使用 OpenConnect *** 连接
Posted
技术标签:
【中文标题】无法使 Docker 容器使用 OpenConnect *** 连接【英文标题】:Unable to make Docker container use OpenConnect *** connection 【发布时间】:2020-11-04 15:46:10 【问题描述】:我有一个运行 Ubuntu 16.04 的 VM,我想在其上部署一个打包为 Docker 容器的应用程序。应用程序需要能够向 *** 下的服务器执行 HTTP 请求(例如 server1.***-remote.com
)
我已成功配置主机 VM,以便通过 openconnect
连接到 ***,我可以使用 systemd
服务打开/关闭此连接。
不幸的是,当我运行docker run mycontainer
时,主机和容器都无法访问server1.***-remote.com
。奇怪的是,*** 连接服务日志中并没有显示错误,而是停留在确认连接成功的 openconnect 消息中。
如果我在启动mycontainer
后重新启动*** 连接,主机可以访问server1.***-remote.com
,但不能访问容器。此外,如果我在mycontainer
或任何其他容器上发出任何类似docker run/start/stop/restart
的命令,即使对于主机,连接也会再次中断。
注意:我已经检查了 ip 路由,Docker 和 *** 子网之间似乎没有冲突。
注意:使用--net="host"
运行容器会导致主机和容器都能够访问 ***,但我想避免使用此选项,因为我最终会进行 docker compose 部署,这需要所有容器以桥接模式运行.
提前感谢您的帮助
编辑:我发现这是一个 DNS 问题,因为即使在 *** 连接似乎失败后,我也能够 ping 与 server1.***-remote.com
对应的 IP。我正在阅读有关使用 Docker 和 Docker Compose 进行 DNS 管理的文档,以及它们对主机 /etc/resolv.conf
文件的使用。
【问题讨论】:
【参考方案1】:希望六个月后您不再需要帮助!有些细节有所不同,但这听起来有点像我遇到的问题。就我而言,解决方案有点令人失望:连接到 *** 后,重新启动 docker 守护进程:
sudo systemctl restart docker
我在这里做了一些推论,但似乎当守护程序启动时,它会根据当时的网络状态做出一些决定/配置。就我而言,守护程序在我启动时启动。不出所料,当我启动时,我还没有机会连接到 ***。因此,我的容器流量(包括 DNS 查找)直接通过我的网络。
向this answer 致敬,指导我走上正确的道路。
【讨论】:
感谢您的回复。我的解决方法是设置docker run
--dns flag,以及*** 的DNS 服务器地址。老实说,我不记得我是否已经尝试过您的解决方案,但由于某种原因没有奏效。
您的回答有帮助。谢谢。以上是关于无法使 Docker 容器使用 OpenConnect *** 连接的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + MySQL + Docker Compose - 无法使 Spring Boot 连接到 MySQL