Невозможно вызвать внешний API из веб-приложения, размещенного в Docker. - PullRequest
0 голосов
/ 22 ноября 2018

Мое веб-приложение работает в Docker и пытается вызвать внешний API, который размещен на IIS, и я не могу получить доступ к внешнему API.Выкидываю ниже сообщение об ошибке: но когда мое веб-приложение работает на локальном iis, я могу подключиться к API и получить ответ.Пожалуйста, помогите мне в этом.

InnerException {System.Net.Http.HttpRequestException: такой хост не известен ---> System.Net.Sockets.SocketException: такой хост не известен в системе.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, порт Int32, введите описание изображения здесьCancellationToken cancellationToken) --- Конец внутренней трассировки стека исключений --- на System.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, порт Int32, CancellationTokencancellationToken) в System.Threading.Tasks.ValueTask1.get_Result () в System.Net.Http.HttpConnectionPool.CreateConnectionAsync (запрос HttpRequestMessage, CancellationToken cancellationToken) в System.Threading.Tasks.Rue.Ru.HttpConnectionPool.WaitForCreatedConnectionAsync (ValueTask1 creationTask) в System.Threading.Tasks.ValueTask1.get_Result () в System.Net.Http.HttpConnectionPool.SendWithRetryAsynk запрос на возврат, запрос на возврат.RedirectHandler.SendAsync (HttpRequestMessage запрос, CancellationToken CancellationToken) в System.Net.Http.HttpClient.FinishSendAsyncUnbuffered (TASK1 sendTask, HttpRequestMessage запрос, CancellationTokenSource каратов, булевы disposeCts) в System.Net.Http.HttpClient.GetStringAsyncCore (TASK1 getTask)} системы.Exception {System.Net.Http.HttpRequestException}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Для MacO и Windows вы можете попробовать host.docker.internal .

Заменить localhost на host.docker.internal.

        public async Task<IActionResult> About()
    {
        //ViewData["Message"] = "Your application description page.";
        HttpClient client = new HttpClient();
        //var result = await client.GetStringAsync(@"http://localhost/IISWindows/home/test");
        var result = await client.GetStringAsync(@"http://host.docker.internal/IISWindows/home/test");
        ViewData["Message"] = result;
        return View();
    }

Если вы используете docker в linux, вы можете попробовать создать новый контейнер для перенаправления запроса на хост, для получения дополнительной информации обратитесь к docker-host .

0 голосов
/ 23 ноября 2018

Я думаю, что проблема в DNS-сервере Docker.Вы можете попробовать использовать настоящий DNS-сервер, такой как 8.8.8.8

. Если вы используете Docker в Windows, вы можете попробовать обновить настройки DNS 8.8.8.8

Docker DNS

Если вы используете Ubuntu, вы можете попробовать этот параметр:

# /etc/docker/daemon.json
{
    "dns": ["8.8.8.8"]
}
...