You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求用Docker Buildkit缓存.NET 5 Nuget包的Dockerfile示例

适配BuildKit缓存的Vue + .NET 5 MVC混合应用Dockerfile示例

前置说明

  • 需确保Docker已启用BuildKit功能:Linux/macOS下构建前执行export DOCKER_BUILDKIT=1,Windows下可在Docker Desktop设置中开启「Use the new BuildKit backend」
  • NuGet在Linux容器内的默认全局包缓存路径为/root/.nuget/packages,通过--mount=type=cache挂载该路径即可实现跨构建的包复用
  • 示例同时添加了npm缓存挂载,进一步缩短前端Webpack构建耗时

完整Dockerfile

# 1. 构建阶段:使用.NET 5 SDK镜像
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src

# 安装Node.js(版本可根据你的项目要求调整,以下为Node 16示例)
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - \
    && apt-get install -y nodejs

# 先复制所有.csproj文件,利用Docker层缓存:只要项目依赖不变,这一步不会重复执行
COPY *.csproj ./
# 挂载NuGet缓存执行restore
RUN --mount=type=cache,target=/root/.nuget/packages \
    dotnet restore "YourProjectName.csproj"

# 复制所有项目代码
COPY . .
WORKDIR "/src/YourProjectName"

# 挂载npm缓存安装前端依赖+执行Webpack打包
RUN --mount=type=cache,target=/root/.npm \
    npm install \
    && npm run build

# 构建发布版本
RUN dotnet publish "YourProjectName.csproj" -c Release -o /app/publish /p:UseAppHost=false

# 2. 最终运行阶段:使用轻量的.NET 5运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "YourProjectName.dll"]

注意事项

  • 把示例中的YourProjectName替换为你实际的项目名称
  • Node.js版本需要和你本地开发用的版本保持一致,避免前端构建报错
  • 第一次构建时会生成缓存,后续只要csproj或package.json没有改动,依赖安装步骤耗时可以从十几分钟缩短到几秒

内容的提问来源于stack exchange,提问作者SKK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:24:05