#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-адрес сервера для ведения журнала. Проверит предоставленные вами параметры.