我已经部署了一个。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下运行而有所不同。(