如何使用使用 https 的应用程序启动 docker 容器

How to start docker container with app that uses https

我在 .Net Core 3.1 中有一个 Web 应用程序,它在 Angular 应用程序的单一解决方案中运行。我的应用托管在 Docker 的 Ubuntu 服务器上。一切都 运行 没有任何问题,我的应用程序可以通过 URL 从 http 访问,但我想确保它的安全并开始使用 https。 在本地调试时效果很好。当我在本地启动我的应用程序时,我可以在 https://localhost:5001 上访问它并且我的网络浏览器显示连接是安全的(我猜它使用某种自签名证书运行)。这是本地调试时控制台的输出:

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: D:\Repositories\myApp\Vs\Web

但是,在服务器控制台上我没有看到 "https" 部分:

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /app

我添加了 app.UseHttpsRedirection();

services.AddHttpsRedirection(options =>
            {
                options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
                options.HttpsPort = 443;
            });

给我的 Startup.cs。我还在 Docker 文件中公开了端口 80 和 443。当我通过 URL 进入我的应用程序时,它会将我重定向到 https,我得到 ERR_CONNECTION_REFUSED,因为很明显,https 端口在 Docker 上未打开。我是 运行 我的 Docker 容器 -p 80:80 -p 443:443。 我从我的域提供商那里购买了证书(我在不同平台上有一个服务器),我从他们那里得到了 4 个文件:证书、CSR、私钥和 CA。

我的 https 是否无法在服务器上访问,因为我在设置 Docker 容器时没有 "inject" 证书?如果是,如何安全地进行?

可能你的443端口被其他应用占用了。您应该尝试公开一些其他端口,例如 5001:443 并且您应该添加环境变量:

       -e ASPNETCORE_URLS="https://+;http://+" 
       -e ASPNETCORE_HTTPS_PORT=5001