【发布时间】:2022-02-18 14:16:10
【问题描述】:
我是 Docker 新手,由于缺少 ssl 证书,我在 docker 中运行我的应用程序时遇到了麻烦。如何使用开发证书在非开发环境的 docker 中运行 aspnetcore 应用程序?
我有以下由 Visual Studio 生成的Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyApp/MyApp.csproj", "MyApp/"]
COPY [...other libraries...]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
当我使用默认设置(开发)从 Visual Studio 运行它时,它会连接 Docker 并且一切运行正常。但是,我想使用不同的 appsettings 文件 (appsettings.docker.json),因为在 Docker 中运行时我需要一些不同的值,并且我已经在使用我的 appsettings.development.json 从 VS 进行标准运行。因此我设置了ASPNETCORE_ENVIRONMENT=Docker。这引起了我的痛苦,因为我突然收到了InvalidOperationException:
System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
根据this 的回答,我发现当环境变量为Development 时,dotnet 会自动生成开发证书。对于不同的环境,如何解决这个问题?
我确实尝试在 Dockerfile 中使用 dotnet dev-certs https 命令,但是构建失败,说映像中没有 sdk,因此不知道该命令。
【问题讨论】:
-
我确实试过了,但最终图像中的根文件夹是空的,不确定是根本没有创建证书还是另一个问题。
-
您需要在 Dockerfile 的构建阶段运行
dotnet dev-certs才能复制一些内容。你做到了吗? -
是的,我做到了。我会更深入地研究它。
-
@HansKilian 似乎根目录中没有
.dotnet文件夹,在 https/myApp.pfx 中有一个包含我的应用程序的 pfx 证书的.aspnet文件夹,但运行时没有似乎在那里找到它。
标签: docker ssl aspnetcore-environment