为一个ASP.NET Core 2.1 Angular项目配置Dockerfile

7

我是一个完全的Docker新手,目前正在尝试创建一个带有Angular的ASP.NET Core 2.1项目。我在Docker for Windows上使用Linux容器,我的IDE是VS2017社区版。

目前,我收到了这个错误:

[1] 确保已安装'npm'并且可以在其中一个PATH目录中找到它。 当前的PATH环境变量是:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 确保可执行文件位于其中一个目录中,或者更新您的PATH。

我相信我需要在我的Docker实例中安装Node.js,或者称之为Dockerfile。请指出我假设中的错误。以及如何确保无论我使用什么样的容器,依赖项都将被安装?我期望我的未来项目将安装在不同的平台上。


你使用的是哪张图片? - Ignacio Millán
@IgnacioMillán 怎么检查呢?谢谢。 - eSPiYa
3个回答

14
在microsoft/dotnet:2.1-aspnetcore-runtime容器镜像中,未安装npm/nodejs。若要在容器中安装,请更新Docker文件。
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base

# Setup NodeJs
RUN apt-get update && \
    apt-get install -y wget && \
    apt-get install -y gnupg2 && \
    wget -qO- https://deb.nodesource.com/setup_6.x | bash - && \
    apt-get install -y build-essential nodejs
# End setup

WORKDIR /app
EXPOSE 80

只有 Angular CLI 的实时重载未能正常工作。


之前在Github上看到过这个,但我不知道应该把这段代码放在哪里。感谢你指出了我应该放置的位置。虽然我将setup_6.x更改为setup_10.x,因为我的计算机安装的是Node.js v10。现在它可以工作了。再次感谢! - eSPiYa
4
FROM microsoft/dotnet:2.1-sdk AS build 之后的第二个容器中,你可能还需要添加安装 node 的代码。如果你收到类似于“Module build failed : error : Missing binding /src/myapp.UI/ClientApp/node_modules/node-sass/..” 的消息,请尝试添加以下内容:FROM build AS publish WORKDIR /src/myapp.UI/ClientApp RUN npm rebuild node-sass --force WORKDIR /src/myapp.UI RUN dotnet publish myapp.UI.csproj -c Release -o /app - SteveC
@Marcel,有没有办法让实时重新加载起作用? - lcssanches

0

由于发布是基于microsoft/dotnet:2.1-sdk镜像进行的。因此,该基础镜像仅包含dotnet sdk,但未安装npm。

解决此问题有两个步骤:

1)按@Marcel的答案将nodejs安装添加到现有的dotnet:2.1-sdk中。

2)您可以在Dockerfile中添加额外的步骤,以基于NODE镜像构建前端。构建成功后,您将获得生成的前端文件,并将它们复制到最终阶段的运行时镜像中。因此,您不需要使用此选项向dotnet sdk添加任何安装,并且使用具有多个阶段的单个Dockerfile,您将分别构建后端和前端站点。

如果您想将其作为第二个选项,请按照下面的链接单独在同一docker文件上使用ASP.NET Core构建前端:

Dockerize ASP.NET Core Angular application (Solving error: The command “npm install” exited with code 127.)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接