Alpine镜像中ASP.NET Core Angular应用Node.js v16安装问题排查
ASP.NET Core Angular应用Alpine容器化时npm未找到错误
我在使用Alpine镜像对ASP.NET Core Angular应用进行容器化时,运行Dockerfile出现了以下错误:
line 2: npm: not found
The command "npm install" exited with code 127
之前我用以下方式安装Node.js时一切正常:
ENV NODE_VERSION=16.13.1 RUN curl -fsSLO --compressed "https://unofficial-builds.nodejs.org/download/release/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64-musl.tar.xz"; \ tar -xJf "node-v$NODE_VERSION-linux-x64-musl.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ && ln -s /usr/local/bin/node /usr/local/bin/nodejs; FROM build AS publish RUN dotnet publish 'MyApp.API.csproj' -c Release -o /app/publish --no-restore
当前使用的Dockerfile内容如下:
FROM node:16-alpine AS node_builder WORKDIR /app COPY MyApp/ClientApp/package*.json ./ RUN npm install --force FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build WORKDIR /src COPY MyApp.Models ./MyApp.Models COPY MyApp.Service ./MyApp.Service COPY MyApp.Repository ./MyApp.Repository COPY MyApp./MyApp WORKDIR /src/MyApp RUN dotnet restore 'MyApp.API.csproj' RUN dotnet build 'MyApp.API.csproj' --disable-parallel -c Release -o /app/build FROM build AS publish COPY --from=node_builder /app/dist /app/dist RUN dotnet publish 'MyApp.API.csproj' -c Release -o /app/publish --no-restore FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS final ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false RUN apk add --no-cache \ icu-data-full \ icu-libs COPY --from=publish /app/publish/ /app/ EXPOSE 5001 ENTRYPOINT ["dotnet", "MyApp.API.dll"]
核心问题:
由于dotnet publish命令会自动执行npm install,因此需要在publish阶段具备Node.js环境。我清楚需要将Node.js依赖复制到publish阶段,但尝试数小时仍未解决错误。
注:无法使用RUN apk add --no-cache nodejs=16 npm从Alpine包源下载Node.js,因为该源中没有16版本。
解决方案
次日我解决了该问题,正确的安装命令如下:
RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.16/main/ nodejs=16.20.2-r0 RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.14/main/ npm=7.17.0-r0
之前的错误是因为未正确安装npm且Node.js下载有误,上述命令可修复该问题。
内容的提问来源于stack exchange,提问作者Douglas Sant'Anna
相关产品推荐
相关产品推荐

