构建含.NET Core SDK的Docker镜像时自定义模板安装失败如何解决
解决方案
问题根源
该问题有两种常见触发场景:
- dotnet默认将
dotnet new --install安装的模板存储在当前用户的家目录下(Linux路径为~/.templateengine),属于用户级资源,切换用户后无法读取 - 你当前Dockerfile中的
build阶段是独立拉取的干净.NET SDK镜像,没有继承安装了模板的base阶段,如果是构建流程中需要用到模板,build阶段自然找不到对应模板
对应解决方法
场景1:模板需要在容器运行时使用
选择以下任意一种方案即可:
- 全局安装模板,所有用户都可访问:将
base阶段的安装命令修改为:RUN dotnet new --install MyCustomTemplate::1.0.0 --global - 统一安装模板和容器运行时的用户:微软官方.NET SDK镜像内置了
app普通用户,切换到该用户后再安装模板即可:FROM mcr.microsoft.com/dotnet/sdk:5.0 AS base # 切换到和运行时一致的app用户 USER app RUN dotnet new --install MyCustomTemplate::1.0.0 WORKDIR /app
场景2:模板需要在构建流程(build/publish阶段)使用
将build阶段的基础镜像改为已经安装了模板的base阶段即可,修改后的build阶段开头如下:
# 不再独立拉取SDK,继承base阶段复用已安装的模板 FROM base AS build WORKDIR /src COPY ["DockerTemplates/DockerTemplates.csproj", "DockerTemplates/"] # 后续原有构建逻辑保持不变
内容的提问来源于stack exchange,提问作者Satyajit
相关产品推荐
相关产品推荐

