【问题标题】:.NetCore PostAsync and GetAsync don't work with Docker.NetCore PostAsync 和 GetAsync 不适用于 Docker
【发布时间】:2017-05-09 14:57:32
【问题描述】:

我正在 .NetCore 1.1 中创建一个需要调用外部服务的 WebAPI。当我使用dotnet run 运行它时,它运行良好,但是当我使用 Docker 时,我得到一个

发生了一个或多个错误。 (发送时发生错误 请求。)

这是我的 Post 方法:

public static string Post(string url, string jsonObject, string serviceName)
{
  // opening a connection to the microservice
  using (HttpClient client = new HttpClient())
  using (HttpResponseMessage response = client.PostAsync(url, new StringContent(jsonObject, Encoding.UTF8, "application/json")).Result)
  {
    LogWrapper.SafeInfo(LoggingEvents.SERVICECALLER_GETSERVICESRESPONSE, "Let's test if we get an OK response from " + serviceName);
    // we'll throw an exception in case status code is different from 200
    response.EnsureSuccessStatusCode();

    LogWrapper.SafeInfo(LoggingEvents.SERVICECALLER_GETSERVICESRESPONSE, "We got an OK response from " + serviceName);

    using (HttpContent responseContent = response.Content)
    {
      return responseContent.ReadAsStringAsync().Result;
    }
  }
}

错误在client.PostAsync 行中抛出。在 GET 方法中也会出现同样的错误。

我已经检查了 URL 和参数。

更有趣的是,它只发生在我在 docker 容器中运行我的应用程序时。当我在没有 Docker 的情况下运行我的应用程序时,它运行良好。

感谢您的帮助。

【问题讨论】:

  • 您需要更深入地记录异常。检查它以获取提供附加信息的内部异常。目前,您的描述过于宽泛。 1000 的 1 个可能原因 - 无法从 docker 网络访问目标主机。
  • 跑什么怎么办?您需要提供更多信息。您正在运行的命令。 URL 发布到的内容。此 URL 的运行位置。涉及的每个服务的日志。什么 Docker 版本。如果 Docker 是本地的,它是如何安装/运行的。
  • 旁注:您正在以同步方式使用async 方法与阻塞调用.Result,这是一种不好且危险的做法。在这种情况下使用await

标签: c# docker asp.net-core .net-core


【解决方案1】:

抱歉没有详细说明,但经过一番阅读和谷歌搜索后,我终于发现了问题。

我有两个容器在 localhost 上运行,所以我请求从容器 A 到容器 B 的服务。

我使用了http://127.0.0.1:356/api/LogIn地址,但问题是本例中的localhost并不指向我的机器,而是指向容器A本身。这就是为什么我可以使它与dotnet run 一起工作,但不能与Docker 一起工作。

事实上,this answer 让我看到了我的错误。

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2022-01-08
    • 2015-06-29
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多