将 dotnet dev-certs 与 aspnet docker 映像一起使用

Han*_*ian 17 c# docker asp.net-core

您可以使用它dotnet dev-certs https来生成与 ASP.NET 一起使用的自签名证书,如该 dockerfile 所示

FROM mcr.microsoft.com/dotnet/sdk:5.0 as build
WORKDIR /src
RUN dotnet new webapi -o app
RUN dotnet dev-certs https
RUN dotnet publish -o out app/app.csproj
ENV ASPNETCORE_URLS="https://*:443;http://*:80"
WORKDIR /app
RUN cp -r /src/out/* .
CMD ["dotnet", "app.dll"]
Run Code Online (Sandbox Code Playgroud)

不过,我想将最终图像基于 aspnet 图像。所以我把它改为

FROM mcr.microsoft.com/dotnet/sdk:5.0 as build
WORKDIR /src
RUN dotnet new webapi -o app
RUN dotnet dev-certs https
RUN dotnet publish -o out app/app.csproj

FROM mcr.microsoft.com/dotnet/aspnet:5.0 as final
ENV ASPNETCORE_URLS="https://*:443;http://*:80"
WORKDIR /app
COPY --from=build /src/out .
CMD ["dotnet", "app.dll"]
Run Code Online (Sandbox Code Playgroud)

我可以构建它,但是当我运行它时,它会失败,因为它找不到证书。我无法dotnet dev-certs https在最终映像中运行,因为 dev-certs 命令只是 SDK 的一部分,而不是 aspnet 映像。我想将证书复制到最终图像,但我不知道dotnet dev-certs https它存储在哪里,也找不到有关它的任何文档。

我该如何解决这个问题,以便我的图像基于 aspnet 并且可以接受通过 https 的请求?

Han*_*ian 22

经过一番探索,我在 /root/.dotnet/corefx/cryptography/x509stores/my/ 中找到了证书

添加

COPY --from=build /root/.dotnet/corefx/cryptography/x509stores/my/* /root/.dotnet/corefx/cryptography/x509stores/my/
Run Code Online (Sandbox Code Playgroud)

到最终图像解决了这个问题。

  • 这是可行的,因为使用了两个不同的容器镜像;一个基于用于构建的 SDK,另一个基于用于最终可部署映像的 .NET 运行时。他们无法看到彼此的更改,因此您需要从一个复制到另一个:) (2认同)
  • 您可以通过运行“dotnet dev-certs https -ep [PATH/FILE_NAME.pfx] -p [PASSWORD]”来设置证书路径,然后您只需将其从 SDK 复制到 apsnet 映像 (2认同)