使用 Docker Compose 透過 HTTPS 託管 ASP.NET Core 映像

ASP.NET Core 預設使用 HTTPS。 HTTPS 依賴 憑證, 信任、身分識別和加密。

本文件說明如何使用 HTTPS 執行預先建置的容器映像。

如需開發案例,請參閱使用 Docker over HTTPS 開發 ASP.NET Core 應用程式。

此範例需要 Docker 17.06 或更新版本的 Docker 用戶端 。

必要條件

本文件中的部分說明需要 .NET Core 2.2 SDK 或更新版本。

憑證

網域的生產託管需要憑證授權單位提供的憑證。 Let's Encrypt 是提供免費憑證的憑證授權單位。

本文件使用自我簽署的開發憑證,透過 localhost 裝載預先建置的映像。 這些指示類似於使用生產憑證。

針對正式環境憑證:

  • 不需要 dotnet dev-certs 工具。
  • 憑證不需要儲存在說明中使用的位置。 將憑證儲存在網站目錄以外的任何位置。

下一節中所包含的指示會在 docker-compose.yml. 中使用 volumes 屬性,將憑證掛接至容器。您可以在 Dockerfile 中使用 COPY 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:

  • 這會使使用相同映像透過開發人員憑證進行測試變得困難。
  • 這使得很難將相同的映像用於使用生產憑證的 Hosting。
  • 憑證外洩有重大風險。

使用 docker compose 以 HTTPs 支援啟動容器

針對您的作業系統組態,使用下列指示。

在 Windows 上使用 Linux 容器

產生憑證並設定本機電腦:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

使用 .NET CLI 的前述命令:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 替換為密碼。

使用下列內容建立 docker-compose.debug.yml 檔案:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。

使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:

docker-compose -f "docker-compose.debug.yml" up -d

macOS 或 Linux

產生憑證並設定本機電腦:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

在 Linux 上, dotnet dev-certs https --trust 需要 .NET 9 或更新版本的 SDK。 針對 .NET 8.0.401 或更早版本的 SDK 上的 Linux,請參閱 Linux 發行版的文件以建立憑證信任。

在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 取代為密碼。

使用下列內容建立 docker-compose.debug.yml 檔案:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。

使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:

docker-compose -f "docker-compose.debug.yml" up -d

使用 Windows 容器

產生憑證並設定本機電腦:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 取代為密碼。

使用下列內容建立 docker-compose.debug.yml 檔案:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
    volumes:
      - ${USERPROFILE}\.aspnet\https:C:\https:ro

docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。

使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:

docker-compose -f "docker-compose.debug.yml" up -d

另請參閱

ASP.NET Core 預設使用 HTTPS。 HTTPS 依賴 憑證, 信任、身分識別和加密。

本文件說明如何使用 HTTPS 執行預先建置的容器映像。

如需開發案例,請參閱使用 Docker over HTTPS 開發 ASP.NET Core 應用程式。

此範例需要 Docker 17.06 或更新版本的 Docker 用戶端 。

必要條件

本文件的部分指示需要 .NET Core 2.2 SDK 或更新版本。

憑證

網域的生產託管需要憑證授權單位提供的憑證。 Let's Encrypt 是提供免費憑證的憑證授權單位。

本文件使用自我簽署的開發憑證,透過 localhost 託管預先建置的映像。 這些指示類似於使用生產憑證。

針對正式環境憑證:

  • 不需要使用 dotnet dev-certs 工具。
  • 憑證不需要儲存在說明中使用的位置。 將憑證儲存在網站目錄以外的任何位置。

下列章節中所包含的指示會使用 docker-compose.yml. 中的 volumes 屬性,將憑證掛接至容器。您可以在 Dockerfile 中使用 COPY 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:

  • 這會使使用相同映像檔透過開發人員憑證進行測試變得困難。
  • 這使得很難將相同的映像用於 Hosting 並搭配生產憑證。
  • 憑證有遭到洩露的重大風險。

使用 docker compose 以 HTTPS 支援啟動容器

針對您的作業系統組態,使用下列指示。

在 Windows 上使用 Linux 容器

產生憑證並設定本機電腦:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

使用 .NET CLI 的上一個命令:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 取代為密碼。

使用下列內容建立 docker-compose.debug.yml 檔案:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。 在上述命令中,將 -\0pw- 替換為密碼。

使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:

docker-compose -f "docker-compose.debug.yml" up -d

macOS 或 Linux

產生憑證並設定本機電腦:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

只有在 macOS 和 Windows 上才支援 dotnet dev-certs https --trust。 您必須以您的發行版本支援的方式信任 Linux 上的憑證。 您可能需要在瀏覽器中信任憑證。

在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 替換為密碼。

使用下列內容建立 docker-compose.debug.yml 檔案:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。

使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:

docker-compose -f "docker-compose.debug.yml" up -d

在 Windows 上使用 Windows 容器

產生憑證並設定本機電腦:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 以密碼取代。

使用下列內容建立 docker-compose.debug.yml 檔案:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
    volumes:
      - ${USERPROFILE}\.aspnet\https:C:\https:ro
The password specified in the docker compose file must match the password used for the certificate. In the preceding commands, replace `-\0pw-` with a password.


Start the container with ASP.NET Core configured for HTTPS:

```console
docker-compose -f "docker-compose.debug.yml" up -d

另請參閱