【问题标题】:Configuring Dockerfile for an ASP.NET Core 2.1 Angular Project为 ASP.NET Core 2.1 Angular 项目配置 Dockerfile
【发布时间】:2018-11-24 09:05:06
【问题描述】:

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

目前,我收到此错误:

[1] 确保已安装“npm”并且可以在 PATH 目录之一中找到。 当前 PATH 环境变量为:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 确保可执行文件位于这些目录之一中,或更新您的 PATH。

我相信我需要在我的 Docker 实例中安装 Node.js 或任何你称之为的东西,它应该通过 Dockerfile。请指出我的假设中的错误。以及如何确保无论我使用哪种容器都将安装依赖项?我期待我未来的项目将安装在不同的平台上。

【问题讨论】:

  • 您使用的是哪张图片?
  • @IgnacioMillán 如何检查?谢谢

标签: angular docker .net-core asp.net-core-2.0 docker-for-windows


【解决方案1】:

在 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。它现在正在工作。再次感谢!
  • 您可能还需要添加代码以在第二个容器上安装节点,即。之后:FROM microsoft/dotnet:2.1-sdk AS build 如果您收到类似于“模块构建失败:错误:缺少绑定 /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
  • @Marcel 有没有办法让实时重新加载工作?
【解决方案2】:

因为发布发生在基于 microsoft/dotnet:2.1-sdk 映像上。所以,这个基础镜像只包含 dotnet sdk,但没有 npm 安装这个基础镜像。 解决这个问题有两个步骤:

1) 将安装 nodejs 添加到现有的 dotnet:2.1-sdk,如 @Marcel 的回答中所述。

或

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

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

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

【讨论】:

    【解决方案3】:

    除了将 NPM 和 Node.js 安装到基础映像之外,您还可以选择具有预安装框架的基础映像。您可以使用我在 hub.docker.com 上公开提供的 dotnet-angular 图像。只需替换

    FROM microsoft/dotnet:2.2-sdk AS build
    

    与

    FROM mjibrandl/dotnetcore-angular:latest AS build
    

    也请查看我的文章:Setup Azure DevOps YAML pipeline to publish a .NET Core Angular 7 docker container to Azure Container Registry

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2019-01-18
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2019-10-17
      • 2019-02-15
      相关资源
      最近更新 更多