C# 停靠aspnetcore反应模板失败

C# 停靠aspnetcore反应模板失败,c#,node.js,reactjs,docker,.net-core,C#,Node.js,Reactjs,Docker,.net Core,最近,我从react模板创建了一个aspnetcore-2.2项目,正如我注意到的,它没有现成的docker支持 因此,我添加了由VS'17生成的dockerfile: FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM microsoft/dotnet:2.2-sdk AS build COPY ["SpaProj.WebUI/SpaProj.WebUI.csp

最近,我从react模板创建了一个aspnetcore-2.2项目,正如我注意到的,它没有现成的docker支持

因此,我添加了由VS'17生成的dockerfile:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.2-sdk AS build
COPY ["SpaProj.WebUI/SpaProj.WebUI.csproj", "SpaProj.WebUI/"]
COPY ["SpaProj.Application/SpaProj.Application.csproj", "SpaProj.Application/"]
COPY ["SpaProj.Domain/SpaProj.Domain.csproj", "SpaProj.Domain/"]
COPY ["SpaProj.Persistence/SpaProj.Persistence.csproj", "SpaProj.Persistence/"]
RUN dotnet restore "SpaProj.WebUI/SpaProj.WebUI.csproj"
COPY . .
WORKDIR "/src/SpaProj.WebUI"
RUN dotnet build "SpaProj.WebUI.csproj" -c Release -o
FROM build AS publish
RUN dotnet publish "SpaProj.WebUI.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SpaProj.WebUI.dll"]
就我的研究而言,最新的
dotnet
images没有预先安装nodejs,因此得出的结论是:

System.AggregateException: One or more errors occurred. (One or more errors occurred. (Failed to start 'npm'. To resolve this:.

[1] Ensure that 'npm' is installed and can be found in one of the PATH directories.
    Current PATH enviroment variable is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    Make sure the executable is in one of those directories, or update your PATH.

[2] See the InnerException for further details of the cause.)) ---> System.AggregateException: One or more errors occurred. (Failed to start 'npm'. To resolve this:. 
等等

在那之后,我花了整整两天的时间浏览网页来解决这个问题,在一些研究之后,我在dockerfile中添加了几行代码(正如我所想,这将有助于我安装/启动nodejs):

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS Base
WORKDIR /app
EXPOSE 80 443
FROM microsoft/dotnet:2.2-sdk AS build

# install node and npm
ENV NODE_VERSION 10.16.0
ENV NODE_DOWNLOAD_SHA 2e2cddf805112bd0b5769290bf2d1bc4bdd55ee44327e826fa94c459835a9d9a
ENV NODE_DOWNLOAD_URL https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz
RUN wget "$NODE_DOWNLOAD_URL" -O nodejs.tar.gz \
    && echo "$NODE_DOWNLOAD_SHA  nodejs.tar.gz" | sha256sum -c - \
    && tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \
    && rm nodejs.tar.gz \
    && ln -s /usr/local/bin/node /usr/local/bin/nodejs
RUN curl -sL https://deb.nodesource.com/setup_10.x |  bash -
RUN apt-get install -y nodejs
# install npm packages first, this is slow so we want to minimise the number of un-cached runs
WORKDIR /src/SpaProj.WebUI/ClientApp/
COPY SpaProj.WebUI/ClientApp/package.json .
COPY SpaProj.WebUI/ClientApp/package-lock.json .
RUN npm install
RUN npm audit fix
# restore dotnet before build to allow it sit to cache
WORKDIR /
COPY ["SpaProj.Application/SpaProj.Application.csproj", "src/SpaProj.Application/"]
COPY ["SpaProj.Domain/SpaProj.Domain.csproj", "src/SpaProj.Domain/"]
COPY ["SpaProj.Persistence/SpaProj.Persistence.csproj", "src/SpaProj.Persistence/"]
COPY ["SpaProj.WebUI/SpaProj.WebUI.csproj", "src/SpaProj.WebUI/"]
RUN dotnet restore src/SpaProj.WebUI/SpaProj.WebUI.csproj
# copy source files and build
COPY . /src
RUN dotnet build /src/SpaProj.WebUI/SpaProj.WebUI.csproj --no-restore -c Release
RUN dotnet publish /src/SpaProj.WebUI/SpaProj.WebUI.csproj --no-restore -c Release -o /app
# Copy compiled app to runtime container
FROM base AS final
COPY --from=build /app .
CMD ["dotnet", "SpaProj.WebUI.dll"]
但这根本没用。 我还尝试了多级构建,从节点映像收集依赖项,如下所示:

FROM 10.16.1-jessie as node-build
WORKDIR /src
COPY SpaProj.WebUI/ClientApp .
RUN npm install
RUN npm run build
应用程序仍在抛出相同的异常


有人有同样的问题吗?是否有其他was将此类应用程序docker化?

这可能是重复的,这就是为什么aspnetcore react模板不支持docker开箱即用的原因。虽然我还没有尝试过,但我相信处理这个问题的公认方法是使用两个映像,一个用于ASP.NET后端,一个用于前端(节点),并使用docker compose构建和启动两个容器。我想看看其他人是如何解决这个问题的,因为这正是我在Blazor被加入.NET的那一刻就不去理会它的原因Core@AdamVincent说得好。我到底是如何在两张分开的图片中前后放置的?有什么建议吗?我也在考虑最终转向Blazor。但是,如果你总是选择更容易的方式,你将如何成长我问过我的一所大学,他也许能找到一个关于这个主题的端到端研讨会,我会和大家分享。与此同时,你可以看到我之前的一些讨论,但不幸的是,我从未得出完整的端到端解决方案。@AdamVincent,所以我无意中发现了。有人建议在
base
image(这是一个运行时构建)中获取nodejs。所以我这么做了,成功了!但是(!)只有当您通过从docker启动UI项目来调试它时,它才起作用。在cli或visual studio中使用
docker compose build构建它失败(目前)。自动柜员机,我不确定是什么原因造成的,但我们要搬到那里去。稍后我会发布一个结果。