如何在 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
在此非常感谢 Joshua Chini:https://joshuachini.com/2018/02/08/how-to-import-an-enterprise-certificate-into-a-windows-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
在此非常感谢 Joshua Chini:https://joshuachini.com/2018/02/08/how-to-import-an-enterprise-certificate-into-a-windows-container/