我已在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/