无法连接到托管在Docker容器中的Restful API

时间:2018-08-19 12:43:00

标签: c# rest docker docker-compose restsharp

我的项目遇到问题,我已经建立了一个api项目并将其放入docker容器中。

使用浏览器中的本地主机可以很好地通过Web到达容器,但是当尝试通过restsharp通过代码使用它时,httpclient会拒绝连接。

我尝试了本地主机,分配了直接172地址,甚至暴露了我已阅读的其他指示指向127.0.0.1的端口。

我迷失了下一步,因为我似乎无法以任何方式使其工作

这是我设置的简单代码:

api调用

[Route("Internal/Email")]
    public class EmailController : ControllerBase
    {
        [Route("Get")]
        [HttpGet]
        public ActionResult<string> Get()
        {
            return "email got";
        }
    }

消费者致电:

public class TestController : Controller
    {
        private ServiceUrlConstants _serviceUrlConstants = new ServiceUrlConstants();
        private string _serviceUrl;
public IActionResult GetEmail()
        {
            try
            {
                _serviceUrl = _serviceUrlConstants.InternalServiceUrl;
                var httpClient = new HttpClient();
                var response = httpClient.GetAsync(_serviceUrl + "Internal/Email/Get");
                var content = response.Result.Content.ReadAsStringAsync();
                httpClient.Dispose();
                //client = new RestClient(_serviceUrl + "Internal/Email/Get");
                //var response = client.Execute(request);
                //var content = response.Content;
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index");
            }
        }
}

Docker配置(由Visual Studio自动构建,但第三端口除外)

internalapiservice:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_HTTPS_PORT=44310
    ports:
      - "17399:80"
      - "44310:443"
      - "127.0.0.1:45310:45310"
    volumes:
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro

2 个答案:

答案 0 :(得分:0)

端口和连接之类的声音很好。我认为这不是网络问题,而是环境变量的问题。

尝试: -ASPNETCORE_URLS = https://localhost;http://localhost

答案 1 :(得分:0)

我认为默认情况下不允许外部连接。您可以尝试添加网址预留,如this question中所述。也许像这样:

netsh http add urlacl url=https://+:44310/ user=everyone

(看起来您正在将容器端口443映射到计算机上的44310。??)