如何在 docker 容器上的基于 nanoserver-1709 的映像上安装证书?

How do I go about installing a certificate on a nanoserver-1709 based image on a docker container?

我一直在查看这张图片以寻找任何证书管理员,但我找不到任何可以帮助我安装 .cer 证书的东西。 1709 nanoserver 图像没有随 powershell 一起提供,所以为了使用它,我必须使用 microsoft/windowsservercore 图像进行多阶段构建,但我不太确定我将如何去做,我似乎无法通过 google 找到任何有用的东西。

如果有人知道使用或不使用我们的多阶段构建来安装证书的方法,我们将不胜感激。

对于那些感兴趣的人,这是我的 docker-compose.yml 和 Dockerfile

docker-compose.yml

version: '3'

services:
  myapp:
    image: myapp
    ports:
    - "5000:80"
    build:
      context: .
      dockerfile: MyApp\Dockerfile
    container_name: "myapp"
    hostname: "myapp"
    depends_on:
      - db
  db:
    image: "microsoft/mssql-server-windows-express"
    environment:
      SA_PASSWORD: ""
      ACCEPT_EULA: "Y"
    container_name: "myapp"
    hostname: "myapp"

Docker 文件

FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
COPY MyApp.sln ./
COPY MyApp/MyApp.csproj MyApp/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/MyApp
RUN dotnet restore
RUN dotnet ef database update
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

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

谢谢!

在某些图像上,有一个名为 certoc.exe 的工具可以让您导入证书(用法:certoc.exe -addstore root my_root_certificate.cer)。 此工具不存在于 1709 图像上,但存在于诸如 microsoft/nanoserver:sac2016.

之类的图像上

总而言之,我发现处理该问题的最佳方法是将 Dockerfile 更改为包含如下内容:

FROM microsoft/nanoserver:sac2016 as tool COPY --from=tool /Windows/System32/certoc.exe . USER ContainerAdministrator RUN certoc.exe -addstore root my_root_certificate.cer

此处提供完整示例:https://pvlerick.github.io/2018/11/how-to-run-an-https-asp.net-core-app-using-test-certificates-in-nanoserver-1709-1803-with-docker

在此非常感谢 Joshua Chini:https://joshuachini.com/2018/02/08/how-to-import-an-enterprise-certificate-into-a-windows-container/