gpt4 book ai didi

docker - Docker:无法访问服务器

转载 作者:行者123 更新时间:2023-12-02 19:30:14 27 4
gpt4 key购买 nike

这里有一些背景故事。我使用微服务架构实现了两个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");
});
})

为简单起见,我自己使用红est,并跳过反向代理。我当然会将Nginx包括为反向代理,但这是 future 的工作。我在本地测试,它有效。然后,我将其部署到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应该与该问题无关。

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

最佳答案

您应该在容器内部的80和443上添加listen,即options.Listen(IPAddress.Any, 80);,因为此docker声明

ports: 
- "5000:80"

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

关于docker - Docker:无法访问服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com