无法确定 Docker 中重定向的 https 端口

Posted

技术标签:

【中文标题】无法确定 Docker 中重定向的 https 端口【英文标题】:Failed to determine the https port for redirect in Docker 【发布时间】:2018-12-25 09:48:50 【问题描述】:

我正在尝试部署一个从 80 端口公开的 asp.net-core webapi 服务:

docker run --rm -p 80:80 --name radicadorrest -it radicadorrest

错误:

警告: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] 未配置 XML 加密器。密钥 e60978fd-16bc-4ff2-8525-39b5d0c36be5 可能会以未加密的形式保存到存储中。托管环境:生产内容根路径: /app 现在正在监听:http://[::]:80 应用程序已启动。按 Ctrl+C 关闭。

警告: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] 无法确定重定向的 https 端口。应用程序正在关闭...

我尝试过使用不同的端口,但我得到了同样的错误。

Docker 版本:

客户端:版本:17.09.1-ce API 版本:1.32 Go 版本:go1.8.3 Git 提交:19e2cf6 建成:2017 年 12 月 7 日星期四 22:25:13 操作系统/架构:linux/amd64

服务器:版本:17.09.1-ce API版本:1.32(最低版本1.12) Go 版本:go1.8.3 Git 提交:19e2cf6 内置:2017 年 12 月 7 日星期四 22:26:35 OS/Arch:linux/amd64 Experimental:false

我也在 Windows 上尝试了相同的结果。

【问题讨论】:

【参考方案1】:

这是因为当您创建 ASP.NET Core 项目时,您选择了“为 HTTPS 配置”选项。这会添加 HttpsRedirectionMiddleware 中间件,该中间件会为您的 Web 应用程序强制执行 SSL 连接。您创建的 docker 文件仅指定 HTTP 端口。因此 HttpsRedirectionMiddleware 失败并关闭应用程序。基本上,如果您在创建项目时没有选择“为 HTTPS 配置”选项,您会很好或确保正确设置 SSL(端口和证书)。

【讨论】:

这是我的问题,当我从“启动/配置”中删除“app.UseHttpsRedirection()”时,我设法访问了,谢谢! 保持 HTTPS 重定向并让 Docker 能够在安全协议上工作难道不是更循规蹈矩吗?还是奖励太复杂了?【参考方案2】:

这两个警告完全不相关。

对于 DataProtection 警告,我建议遵循 here on the official ASP.Net Core documents 提供的指导。如果您想深入了解相关源代码和决策,可以查看relevant ASP.Net GitHub PR。

对于 https 重定向警告,我建议简单地从 startup.cs 文件中删除 https 重定向策略,该文件通常通过 app.UseHttpsRedirection(); 定义,除非您实际为您的容器使用此策略并且在这种情况下您需要实际上 setup the certificates 并在您的容器上公开 HTTPS 端口。

【讨论】:

【参考方案3】:

您的端口仅指定 http 协议而不是 https,您可能必须找到一种方法让 docker 仅查看 80 并忽略用于 https 的 443 端口

【讨论】:

以上是关于无法确定 Docker 中重定向的 https 端口的主要内容,如果未能解决你的问题,请参考以下文章

在 Next.js 中,如何在 axios 拦截器中重定向页面?

Keycloak 不会在开发中重定向

根据响应在 vue 中重定向

在子进程中重定向 STDOUT

https://example.com/admin 在 Django Nginx 和 gunicorn 中重定向到 https://admin

在 Laravel 5.8 中的 htaccess 中重定向 [重复]