我正在尝试使用 React 创建一个简单的 ASP.NET Core Web 应用程序(使用“ASP.NET Core with React.js”模板)。此外,我想将其容器化。
如果我运行发布配置,一切正常。如果我运行调试配置,似乎环境变量未正确设置并且
npm
项目未设置。
据我研究,这是完全有道理的,因为在使用调试配置进行构建时,Visual Studio / MSBuild 不会执行所有阶段。
我尝试了以下步骤:
<ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
<DockerfileFastModeStage>final</DockerfileFastModeStage>
我发现,我添加到 Base-Stage 的所有内容都将应用于调试容器。但这对我来说没有任何意义。
Visual Studio / MSBuild 使用的映像中实际包含哪些阶段?如果没有执行所有阶段,源代码如何传递到图像/容器中?如果只构建基础阶段,内部使用什么入口点?
我的 Dockerfile:
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y libpng-dev libjpeg-dev curl libxi6 build-essential libgl1-mesa-glx
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y libpng-dev libjpeg-dev curl libxi6 build-essential libgl1-mesa-glx
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs
COPY ["WebsiteLogos/WebsiteLogos.csproj", "WebsiteLogos/"]
RUN dotnet restore "WebsiteLogos/WebsiteLogos.csproj"
COPY . .
WORKDIR "/src/WebsiteLogos"
RUN dotnet build "WebsiteLogos.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebsiteLogos.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM node:16 AS build-web
COPY ./WebsiteLogos/ClientApp/package.json /WebsiteLogos/ClientApp/package.json
COPY ./WebsiteLogos/ClientApp/package-lock.json /WebsiteLogos/ClientApp/package-lock.json
WORKDIR /WebsiteLogos/ClientApp
RUN npm ci
COPY ./WebsiteLogos/ClientApp/ /WebsiteLogos/ClientApp
RUN npm run build
FROM base AS final
WORKDIR /app
ENV ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=Microsoft.AspNetCore.SpaProxy
COPY --from=publish /app/publish .
COPY --from=build-web /WebsiteLogos/ClientApp/build ./ClientApp/build
ENTRYPOINT ["dotnet", "WebsiteLogos.dll"]
我自己想出来了。 MSBuild 生成一个额外的 obj/Docker/docker-compose.vs.debug.g.yml,它定义了这个东西。
Visual Studio / MSBuild 使用的映像中实际包含哪些阶段?
如果不是所有阶段都执行完毕,源代码是如何传递到镜像/容器中的?
如果只构建基础阶段,内部使用什么入口点?