【发布时间】:2018-10-02 02:15:42
【问题描述】:
这里有一点背景故事。我使用微服务架构实现了几个 Web API。我正在尝试使我的微服务可以通过 HTTPS 访问。微服务是使用 .net 核心开发的,所以根据微软文档,为了强制 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:5000 和 Now 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。虽然我不完全理解原因,但我将红隼配置更改为
options.Listen(IPAddress.Any, 5000);
再次构建并运行 docker 镜像,Docker 显示 Now listening on: http://0.0.0.0:5000,但仍然无法正常工作。我也试过用localhost替换IP,没用。我没有使用.UseHttpsRedirection(),https应该与问题无关。
我是否缺少任何配置或做错了什么?如果有人能提供一些启示,那将非常有帮助。提前谢谢你。
【问题讨论】:
标签: docker .net-core microservices