使用 Docker Compose over HTTPS 裝載 ASP.NET Core 映像

ASP.NET Core 預設使用 HTTPSHTTPS 依賴憑證來達到信任、身分識別和加密。

本文件說明如何使用 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 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:

  • 這會使使用相同映像透過開發人員憑證進行測試變得困難。
  • 使用生產憑證進行裝載時,很難使用相同的映像。
  • 揭露憑證有重大風險。

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

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

使用 Linux 容器的 Windows

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

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=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

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=password
      - 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

另請參閱