无法从Docker中托管的Webaplication调用外部api

时间:2018-11-22 15:57:39

标签: .net docker asp.net-web-api asp.net-core .net-core

我的Web应用程序正在docker上运行,并尝试调用IIS上托管的外部api,但我无法访问外部api。抛出以下错误:但是当我的Web应用程序在本地iis上运行时,便能够连接api并获得响应。请帮助我。

  

InnerException {System.Net.Http.HttpRequestException:未知此类主机---> System.Net.Sockets.SocketException:在System.Net.Http.ConnectHelper.ConnectAsync中未知此类主机(字符串主机,Int32端口,在此处输入图像描述CancellationToken cancelToken)-内部异常堆栈跟踪的结尾--在System.Net.Http.ConnectHelper.ConnectAsync(String host,Int32端口,CancellationToken cancelToken)在System.Threading.Tasks.ValueTask1.get_Result ()在System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(Value。 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMe)上的Tasks.ValueTask1.get_Result()在System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage请求,布尔值doRequestAuth,CancellationToken cancellingToken) System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask,HttpRequestMessage request,CancellationTokenSource cts,Boolean disposeCts)在System.Net.Http.HttpClient.GetStringAsyncCore(Task1 getTask) Net.Http.HttpRequestException}

2 个答案:

答案 0 :(得分:0)

我认为问题是Docker DNS服务器。您可以尝试使用真实的DNS服务器,例如8.8.8.8

如果您在Windows上使用Docker,则可以尝试更新DNS设置8.8.8.8

Docker DNS

如果您使用的是Ubuntu,则可以尝试以下设置:

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

答案 1 :(得分:0)

对于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();
    }

如果您在Linux中运行docker,则可以尝试构建新容器将请求重定向到主机,有关更多信息,请参见docker-host