如何从Docker容器内运行的Dot-netCore应用程序获取系统IP



我已经部署了一个。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(在主机网络命名空间(docker run --net=host(中运行应用程序,或(b(将信息作为环境变量(docker run -e MY_SYSTEM_IP=1.2.3.4 ...(或某种配置文件等传递。

(如果你的目标只是连接到主机上运行的服务——我不认为这是你的要求——你确实有几个选项,根据你是在Linux还是MacOS/Windows下运行而有所不同。(

相关内容

最新更新