4

My webapplication is running on docker and trying to call external api which is hosted on IIS and I am not able to access external api. Throwing below error : but when my webapplication is running on local iis then able to connect api and get the response. Please help me on this.

InnerException {System.Net.Http.HttpRequestException: No such host is known ---> System.Net.Sockets.SocketException: No such host is known at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, enter image description hereCancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask1 creationTask) at System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at System.Net.Http.HttpClient.GetStringAsyncCore(Task1 getTask)} System.Exception {System.Net.Http.HttpRequestException}

2 Answers 2

1

I think the problem is Docker DNS server. You can try to use a real DNS server such as 8.8.8.8

If you are using Docker on Windows, you can try to update DNS setting 8.8.8.8

Docker DNS

If you are using Ubuntu, you can try this setting:

# /etc/docker/daemon.json
{
    "dns": ["8.8.8.8"]
}
Sign up to request clarification or add additional context in comments.

2 Comments

thanks Khai for your support but in my case my machine was blocked to call any outer api from docker container. So our security team adds my machine to docker exception list and then started working but taking bit time to get response.
any solutions ?
1

For macOs and Windows, you could try host.docker.internal.

Replace the localhost with 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();
    }

If you are running docker in linux, you could try build a new container to redirect the request to host, for more information refer docker-host.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.