docker不复制crt文件



我试图构建一个测试应用程序,允许我使用HttpClient使用docker调用操作。应用程序可以在使用";http://..."。当我站出来开始用";https://..."我遇到了几个问题,这些问题是我在一个问题中无法遇到的。更具体地说,我开始构建两个Asp.Net Core项目,其中一个项目需要使用docker内部网络使用https从另一个项目调用操作。

我的开发笔记本电脑有:

  • Visual Studio 2019 16.9.4
  • Ubuntu 20.04 LTS
  • Docker桌面

我的docker-compose.override.yml简单地表示为:


services:
mastercontainer:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
#- ASPNETCORE_Kestrel__Certificates__Default__Password=123123
#- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/test-cert.pfx
ports:
- "80"
- "443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ~/.aspnet/https:/https:ro
#- ~/.aspnet/https:/https:ro
#- ./certs:/https:ro
#- ${APPDATA}/ASP.NET/Https:/https:ro
detailcontainer:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=123123
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/test-cert.pfx
ports:
- "6001:6001"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ~/.aspnet/https:/https:ro
#- ${USERPROFILE}/.aspnet/https:/https:ro
#  source: ${USERPROFILE}/.aspnet/https/test-cert.crt
#  target: /usr/local/share/ca-certificates/test-cert.crt
#- ~/.aspnet/https:/https:ro
#- ./certs:/https:ro
#- ${APPDATA}/ASP.NET/Https:/https:ro

然后我的docker-compose.yml是这样的:

version: '3.4'
services:
mastercontainer:
image: ${DOCKER_REGISTRY-}mastercontainer
build:
context: .
dockerfile: mastercontainer/Dockerfile
depends_on:
- detailcontainer

detailcontainer:
image: ${DOCKER_REGISTRY-}detailcontainer
container_name: detailcontainer
build:
context: .
dockerfile: detailcontainer/Dockerfile
#ports:
#    - "443:443"
#volumes:
#  - ~/.vsdbg:/remote_debugger:rw

细节容器的Dockerfile看起来像:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
#EXPOSE 6001
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["detailcontainer/detailcontainer.csproj", "detailcontainer/"]
RUN dotnet restore "detailcontainer/detailcontainer.csproj"
COPY . .
WORKDIR "/src/detailcontainer"
RUN dotnet build "detailcontainer.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "detailcontainer.csproj" -c Release -o /app/publish
#WORKDIR "/src/detailcontainer"
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# PROBLEM IS HERE
COPY ./test-cert.crt /usr/local/share/ca-certificates/test-cert.crt
# HOW TO COPY
RUN chmod 644 /usr/local/share/ca-certificates/testcert.crt && update-ca-certificates
ENTRYPOINT ["dotnet", "detailcontainer.dll"]

我仍然不知道在这个测试解决方案的过程中我可能会遇到哪些问题,因为上面显示的Dockerfile中突出显示的行是:

COPY ./test-cert.crt /usr/local/share/ca-certificates/test-cert.crt

不将crt文件复制到ca证书文件夹。

我的问题是:为什么Dockerfile不复制crt文件?以及如何复制

对不起,我是docker的新手。由于这里有Visual Studio文档,很明显,除非COPY位于基础阶段,否则不会处理它,否则,Visual Studio的优化构建;这是默认行为;将忽略Visual Studio假定为.的对默认DockerFile的任何修改

这个答案给了我很大的帮助,帮助我更好地了解VisualStudio内部构建。

因此,我的Dockerfile应该如下所示,以获得正在复制的文件:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
#WORKDIR /usr/local/share/ca-certificates/
#COPY ["detailcontainer/test-cert.crt", "detailcontainer/"]
COPY ./test-cert.crt /usr/local/share/ca-certificates/
RUN chmod 644 /usr/local/share/ca-certificates/test-cert.crt && update-ca-certificates
WORKDIR /app
EXPOSE 80
EXPOSE 443
...

Dockerfile的其余部分不应修改。

最新更新