【问题标题】:Dev certificate on aspnetcore docker containeraspnetcore docker 容器上的开发证书
【发布时间】: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,因此不知道该命令。

【问题讨论】:

  • 这能回答你的问题吗? Using dotnet dev-certs with aspnet docker image
  • 我确实试过了,但最终图像中的根文件夹是空的,不确定是根本没有创建证书还是另一个问题。
  • 您需要在 Dockerfile 的构建阶段运行 dotnet dev-certs 才能复制一些内容。你做到了吗?
  • 是的,我做到了。我会更深入地研究它。
  • @HansKilian 似乎根目录中没有 .dotnet 文件夹,在 https/myApp.pfx 中有一个包含我的应用程序的 pfx 证书的 .aspnet 文件夹,但运行时没有似乎在那里找到它。

标签: docker ssl aspnetcore-environment


【解决方案1】:

尝试添加这两行

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
# Add the line below ---------------------------------------------------
RUN dotnet dev-certs https
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
# Add the line below ---------------------------------------------------
COPY --from=publish /root/.dotnet/corefx/cryptography/x509stores/my/* /root/.dotnet/corefx/cryptography/x509stores/my/
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

【讨论】:

  • 我确实试过了,不幸的是还是同样的错误。
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2020-12-04
  • 2019-06-21
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多