Docker:无法访问服务器

时间:2018-08-24 21:02:13

标签: docker .net-core microservices

这里有一些背景故事。我使用微服务架构实现了两个Web API。我正在尝试通过HTTPS访问我的微服务。这些微服务是使用.net核心开发的,因此根据Microsoft文档,要实施HTTPS,我需要配置Kestrel。以下是我的操作方式。

.UseKestrel(options =>
            {
                options.Listen(IPAddress.Loopback, 5000);
                options.Listen(IPAddress.Loopback, 5001, listenOptions =>
                {
                    listenOptions.UseHttps("cert.pfx", "pwd");
                });
            }) 

为简单起见,我自己使用kestrel并跳过反向代理。我当然会将Nginx包括为反向代理,但这是未来的工作。我在本地测试,它有效。然后,我将其部署到Docker。这是docker-compose.override文件

version: '3.4'

services:
dataservice:
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=https://+:443;http://+:80
  ports:
    - "5000:80"
    - "5001:443"

在dockerfile中,端口5000和5001被暴露。我将项目构建到图像中,并使用docker run -it --rm -p 5000:80 --name *name* *imagename*在docker上运行。 Docker显示Now listening on: http://127.0.0.1:5000Now listening on: https://127.0.0.1:5001。现在的问题是,撇开https部分,API甚至无法通过http访问。浏览器仅显示This page isn’t working 127.0.0.1 didn’t send any data. ERR_EMPTY_RESPONSE。我从这里Docker: cannot open port from container to host 找到了一个类似的问题,这某种程度上是关于服务器应该听0.0.0.0的问题。尽管我不完全了解原因,但我将茶est配置更改为

options.Listen(IPAddress.Any, 5000);

再次构建并运行docker镜像,并且Docker显示Now listening on: http://0.0.0.0:5000,但仍然无法正常工作。我还尝试用localhost替换IP,它没有用。我没有使用.UseHttpsRedirection(),https应该与该问题无关。

我缺少任何配置还是做错了什么?如果有人可以阐明一点,那将真的很有帮助。预先谢谢你。

1 个答案:

答案 0 :(得分:1)

您应该<div class="main"> <headertext>ExampleTitle</headertext> <p>Welcome to my website.</p> </div>在容器内部的80和443上,即listen,因为此docker声明

options.Listen(IPAddress.Any, 80);

表示本地端口80(源代码中的端口)已导出到外部端口5000,而不是相反。