需要node.js和dotnet sdk在同一个windows docker镜像中

mitkmikd  于 2023-05-16  发布在  Docker
关注(0)|答案(1)|浏览(89)

我有以下Windows的dockerfile,它无法安装node.js,因为msiexec不是可识别的命令...

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build

#####################################################
# I NEED NODE.JS WITHIN THE SAME LAYER AS DOTNET SDK.
RUN curl -o nodejs.msi https://nodejs.org/dist/v14.16.0/node-v14.16.0-x86.msi
RUN msiexec /i nodejs.msi /quiet /qn /norestart
#####################################################

WORKDIR /src
COPY ["NetWithAngular/NetWithAngular.csproj", "NetWithAngular/"]
RUN dotnet restore "NetWithAngular/NetWithAngular.csproj"
COPY . .
WORKDIR "/src/NetWithAngular"
RUN dotnet build "NetWithAngular.csproj" -c Release -o /app/build

# ...the rest I've skipped...

“msiexec”无法识别为内部或外部命令、可操作程序或批处理文件。
有什么问题吗?为什么不管用?我还发现,使用powershell的类似尝试会得到完全相同的错误。所以这是一个没有msiexecpowershell的Windows映像?嗯?不管怎样...
在已经有node.js的dockerfile中添加另一个“stage”不是我需要的解决方案。这是因为dotnet NetWithAngular.csproj构建与Angular SPA集成并启动了“npm构建”。换句话说,我需要dotnet sdk和node / npm在同一层。如何安装node.js,当msiexec不可用时?对于这个问题,究竟是如何msiexecpowershell不可用?

更新

我发现,如果我将基础映像更改为:

FROM mcr.microsoft.com/dotnet/sdk:6.0-windowsservercore-ltsc2022

对于此映像,msiexecpowershell都可以工作。然而,这并没有完全回答我的问题。为什么msiexecpowershell都不能用于原始基础映像?实际上,有人在评论中说他们已经使用完全相同的基础映像成功执行了msiexec

7vux5j2d

7vux5j2d1#

RUN apt-get update -yq &&  \
  apt-get upgrade -yq &&   \
  apt-get install -yq curl

RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -yq nodejs build-essential

相关问题