# ==================== 构建阶段 ==================== FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR / # 复制项目文件并还原依赖 COPY ["HtmlToPdfService.Api/HtmlToPdfService.Api.csproj", "HtmlToPdfService.Api/"] COPY ["HtmlToPdfService.Core/HtmlToPdfService.Core.csproj", "HtmlToPdfService.Core/"] RUN dotnet restore "HtmlToPdfService.Api/HtmlToPdfService.Api.csproj" # 复制所有源代码 COPY . . # 构建和发布应用 WORKDIR "/HtmlToPdfService.Api" RUN dotnet build -c Release -o /app/build RUN dotnet publish -c Release -o /app/publish /p:UseAppHost=false # 下载 Chromium WORKDIR /chromium RUN dotnet tool install --global PuppeteerSharp.Downloader || true ENV PATH="$PATH:/root/.dotnet/tools" RUN puppeteer-sharp-downloader || true # ==================== 运行阶段 ==================== FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final # 安装 Chromium 运行依赖 RUN apt-get update && apt-get install -y \ wget \ gnupg \ ca-certificates \ libnss3 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2 \ libdrm2 \ libxkbcommon0 \ libxcomposite1 \ libxdamage1 \ libxfixes3 \ libxrandr2 \ libgbm1 \ libasound2 \ libpangocairo-1.0-0 \ libgtk-3-0 \ libxshmfence1 \ fonts-liberation \ fonts-noto-color-emoji \ fonts-wqy-zenhei \ fonts-wqy-microhei \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # 复制应用程序 COPY --from=build /app/publish . # 复制 Chromium(如果成功下载) COPY --from=build /root/.local-chromium /root/.local-chromium # 创建 PDF 存储目录 RUN mkdir -p /app/pdfs && chmod 777 /app/pdfs # 设置环境变量 ENV ASPNETCORE_URLS=http://+:5000 ENV ASPNETCORE_ENVIRONMENT=Production ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false EXPOSE 5000 ENTRYPOINT ["dotnet", "HtmlToPdfService.Api.dll"]