docker - 如何在Linux上运行Visual Studio 2019生成的Dockered ASP.net核心应用程序? SSL配置问题

标签 docker asp.net-core .net-core docker-compose

我已在Visual Studio 2019中创建了新的ASP.net Core 2.1项目。我已选择生成Docker linux容器和docker-compose文件。当我使用VS运行它时,一切工作正常。

当我尝试在类似生产环境中运行我的应用程序时出现问题。为了做到这一点,我将代码克隆到targer linux机器上。然后我在项目文件夹中运行docker-compose up

最初,它不起作用,因为应用程序使用HTTPS,并且计算机上的本地主机没有HTTPS证书。我需要生成证书:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p crypticpassword

docker-compose.yml中,我指定了一个卷,用于将带有证书的文件夹链接到docker容器内的文件夹,我的应用在其中查找证书(以下代码的最后一行)。
version: '3.4'

services:
  mongo:
      # not relevant

  mongo-express:
      # not relevant

  synceddb:
      image: ${DOCKER_REGISTRY-}synceddb
      ports:
        - 13000:13000
        - "10002:80"
        - "44361:443"
      build:
        context: .
        dockerfile: SyncedDB/Dockerfile
      depends_on:
        - mongo
      environment:
        - ASPNETCORE_ENVIRONMENT=Development
        - ASPNETCORE_URLS=https://+:443;http://+:80
        - ASPNETCORE_HTTPS_PORT=44361
        - ASPNETCORE_Kestrel__Certificates__Default__Password="crypticpassword"
        - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
      volumes:
      - ${HOME}/.aspnet/https:/https/

Dockerfile如下所示:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
WORKDIR /src
COPY ["SyncedDB/SyncedDB.csproj", "SyncedDB/"]
RUN dotnet restore "SyncedDB/SyncedDB.csproj"
COPY . .
WORKDIR "/src/SyncedDB"
RUN dotnet build "SyncedDB.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "SyncedDB.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SyncedDB.dll"]


问题是:我的应用程序看不到我的证书(至少这是我解释此错误的方式)

crit: Microsoft.AspNetCore.Server.Kestrel[0]

Unable to start Kestrel.

Interop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file

at [...]

Unhandled Exception: Interop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file

[...]

最佳答案

终于解决了。我的配置中有两个错误:

1:证书密码中不必要的引号

有:

- ASPNETCORE_Kestrel__Certificates__Default__Password="crypticpassword"

应该:
- ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword

2:应用程序在错误的位置寻找证书。

我使用的是docker和sudo作为根用户,但是使用普通帐户生成了证书。我以为${HOME}将指向我的主文件夹,但它却指向了根文件夹。

关于docker - 如何在Linux上运行Visual Studio 2019生成的Dockered ASP.net核心应用程序? SSL配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824859/

相关文章:

docker - Traefik + Docker 反向代理 - 不同路径的不同身份验证?

docker - ASP.NET Core 配置值有时在 Kubernetes 中返回空

c# - 强名称程序集 - 必须更改数千个程序集

Linux 1604 : kestrel service can't find dotnet installation

c# - 合并两个 Observable 时保留排序

java - 使用 docker 在 EC2 中部署时 Spring Boot 应用程序不可用 - 错误 404

mongodb - Docker 和 mongo-go-driver "server selection error"

linux - Linux 上的 ASP.NET Core Windows 身份验证

docker - asp.net-core 2.0 Docker部署

c# - 如何将原始数据传递给 asp.net core 中间件