我想制作一个包含Asp.net核心应用和其他组件的docker映像。我决定拉出debian映像,安装必要的组件(在本例中为星号系统),然后提交并将其作为我自己的映像推送,我们称之为A。在Asp.net核心应用程序中,我将A用作ockefile中的父组件并构建图像,我们将其称为B。
但是当我将B作为容器运行时,找不到在映像A中已经安装的组件。
这是我的dockerfile:
FROM vocaoson7/asterisk:king
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
[您正在尝试使用多阶段构建,并且它的工作方式是,最终映像由Dockerfile中的最后一个FROM
命令定义,其后的内容均由该命令定义。
因此,对于您的情况,您将在最终映像中找到的是aspnet:3.1安装(来自用于运行时阶段的基本映像)和一个/ app文件夹,其中包含在out
目录中生成的构建步骤。
您最先的FROM
对最终图像没有任何影响。