繁体   English   中英

如何从在 Docker 容器内运行的 Dot.net Core 应用程序获取系统 IP

[英]How to get System IP from a Dot net Core application running inside a Docker container

我在 AWS 云中使用 Docker 部署了一个 .NET Core 3.1 应用程序。 我尝试通过多种方式获取系统 IP(不是 Docker 容器 IP),但我一直得到 Docker 容器 IP。

有什么方法可以让 Docker 容器正在运行的系统 IP?

Environment.MachineName();


private string LocalIPAddress()
    {
        IPHostEntry host;
        string localIP = "";
        host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (IPAddress ip in host.AddressList)
        {
            Console.WriteLine(ip.ToString());
            if (ip.AddressFamily == AddressFamily.InterNetwork)
                localIP = ip.ToString();
        }
        //return localIP;
        return host.HostName + ", " + Environment.MachineName;
    }

容器中的应用程序无法自动确定“系统 ip”。

虽然有些流程可能有效(例如向https://icanhazip.com 之类的外部服务发出请求以查找您的“外部可见”地址),但这些流程通常会产生无用的答案:

  • 可能你的系统有多个ip,进程返回了错误的ip。
  • 也许您的外部可见地址 ip 来自代理或 NAT 网关,与您主机上实际可用的地址无关。
  • 等等。

容器化服务了解主机的唯一可靠方法是 (a) 在 host.network 命名空间中运行应用程序 ( docker run -.net=host ) 或 (b) 将信息作为环境传递变量( docker run -e MY_SYSTEM_IP=1.2.3.4... )或某种配置文件等。

(如果您的目标只是连接到主机上运行的服务——我认为这不是您要问的——您确实有几个选项,具体取决于您是否在 Linux 下运行,或 MacOS/Windows。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM