Как получить IP-адрес системы из приложения Dot net Core, работающего внутри контейнера Docker

#docker #.net-core #amazon-ec2

#docker #.net-core #amazon-ec2

Вопрос:

Я развернул приложение .NET Core 3.1 с помощью Docker в облаке AWS. Я пытался получить системный IP-адрес (не IP-адрес контейнера Docker) многими способами, но все время получаю IP-адрес контейнера Docker.

Есть ли какой-либо способ получить системный IP-адрес, на котором запущен контейнер Docker?

 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;
    }
 

Комментарии:

1. Звучит как проблема XY . Поиск «системного» IP-адреса менее полезен, чем вы могли подумать на первый взгляд. Что именно вы пытаетесь сделать?

Ответ №1:

Приложение в контейнере не может автоматически определять «системный IP».

Хотя есть некоторые процессы, которые могут работать (например, выполнение запроса к внешней службе, например https://icanhazip.com чтобы найти ваш «внешне видимый» адрес), они часто выдают ответ, который бесполезен:

  • Возможно, в вашей системе несколько IP-адресов, и процесс возвращает неправильный.
  • Возможно, ваш видимый извне ip-адрес поступает от прокси-сервера или шлюза NAT и не имеет ничего общего с адресами, фактически доступными на вашем хосте.
  • И т.д.

Единственный надежный способ для контейнерной службы узнать что-либо о хосте — это либо (а) запустить приложение в пространстве имен сети хоста ( docker run --net=host ), либо (б) передать информацию в виде переменной среды ( docker run -e MY_SYSTEM_IP=1.2.3.4 ... ) или какого-либо файла конфигурации и т. Д.

(Если ваша цель — просто подключиться к службе, запущенной на хосте, — и я не думал, что это то, о чем вы спрашивали, — у вас есть несколько вариантов, которые различаются в зависимости от того, работаете ли вы под Linux или macOS / Windows.)

Комментарии:

1. Спасибо. Мне просто нужен IP-адрес сервера для ведения журнала. Проверит предоставленные вами параметры.