在 运行 Docker 容器中读取主机的 ifconfig

Read host's ifconfig in the running Docker container

我想在 Docker 容器的 运行 期间读取主机的 ifconfig 输出,以便能够解析它并获取 OpenVPN 接口 (tap0) IP 地址并在我的应用程序中处理它.

不幸的是,通过环境传播这个值不是我的情况,因为 IP 地址可能会在 运行 连接容器时发生变化,我不想每次都重新启动我的应用程序容器来查看新值。

当前工作解决方案 是主机上的 CRON,它将 IP 写入共享卷上的文件,容器从中读取 - 但我正在寻找更好的解决方案,因为它在我看来是一种解决方法。此外,还计划使用 network: host 创建新容器,它将看到主机的接口 - 它有效,但它看起来也像是一种解决方法,因为它涉及许多步骤并且可能存在安全问题。

我有一个问题,是否有任何有效且更干净的方法来实现我的目标 - 在 docker 容器中实时读取主机的 ifconfig?

Docker的一个具体设计目标是容器不能直接访问主机的网络配置。您确定的解决方法几乎是执行这些操作的唯一方法。

如果您尝试以某种方式修改主机的网络配置(例如,您实际上是在尝试 运行 一个 VPN),您最好 运行 将其连接Docker 之外。无论哪种方式,您仍然需要 root 权限,但您不需要禁用一堆标准限制来执行您需要的操作。

如果您尝试提供一些可以访问服务的地址,则需要使用环境变量等配置。即使您可以访问主机的配置,这也可能不是您需要的地址:考虑一个云环境,您在负载均衡器后面的云实例上 运行ning,并且外部客户端需要负载均衡器;仅根据主机的网络配置,您无法直接知道这一点。