- A+
所属分类:.NET技术
最近公司新启动一个项目,使用的是Abp Next 和 ant-design-pro-blazor 结合做,前期准备都比较顺畅,当我准备部署线上环境测试的时候,前端的blazor项目构建镜像的时候,就出问题了,错误如下:
Dockfile内容是vs自带功能创建的,本地构建时候失败了,顿时一脸懵,查看了项目文件,带了一些npm的指令。如下:
知道了问题的根源,那就想办法填坑,项目文件的做法,本地开发是不会有问题的,然后本地publish以后,打包构建docker也不会有问题,但是这样就会存在不方便管理的问题,单个人做事没毛病,但笔者线上环境是腾讯云的k8s,走的都是自动构建和发布,所以vs默认生成的dockerfile,是不满足的,因为自动构建的时候是没有安装node的,一堆废话,讲了些有的没得,下面说具体处理,其实使用vs自带的整合前端的模板都会存在类似的问题,例如Angular 结合 core的项目模板等等,笔者是这么处理,首先将前端的项目文件copy一份,重命名为:xxxxxx.Docker.csproj,讲其加入解决方案并编辑新的xxxxxx.Docker.csproj项目文件,去掉npm自动指令,然后替换自动生成dockerfile文件内容,最后再分部构建镜像。最后的dockerfile类似这样的:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
#拉取node镜像,构建前端资源
FROM node:13-alpine AS nodebuilder
WORKDIR /nodeapp
#将完整的前端项目拷贝构建,不要问为什么,问就是不知道
COPY ./src/xxxxxxxx .
RUN ls
#使用cnpm处理,避免npm发癫失效
RUN npm config set unsafe-perm true &&
npm config set registry https://registry.npm.taobao.org &&
npm install -g cnpm --registry=https://registry.npm.taobao.org && cnpm install && cnpm run gulp:pro
# RUN npm install
# RUN npm run gulp:pro
RUN ls
RUN ls wwwroot/css
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
.........
RUN dotnet restore "src/xxxxxxxx/xxxxxxxx.Docker.csproj"
COPY . .
WORKDIR "/src/src/xxxxxxxx"
RUN ls
RUN dotnet build "xxxxxxxx.Docker.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "xxxxxxxx.Docker.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY --from=nodebuilder /nodeapp/wwwroot .
ENTRYPOINT ["dotnet", "xxxxxxxx.dll"]
以上纯属瞎写写,认真你就输了~