Docker:“未找到 npm”

2024-02-15

我正在尝试容器化 ASP.NET Core 和 Angular 应用程序,但遇到了一些麻烦。

我收到这些错误:

 => [internal] load build definition from Dockerfile                                                               0.4s
 => => transferring dockerfile: 872B                                                                               0.1s
 => [internal] load .dockerignore                                                                                  0.4s
 => => transferring context: 35B                                                                                   0.0s
 => [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0                                                  0.5s
 => [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:5.0                                               0.0s
 => [base 1/7] FROM mcr.microsoft.com/dotnet/aspnet:5.0                                                            0.0s
 => [build 1/7] FROM mcr.microsoft.com/dotnet/sdk:5.0@sha256:b69acf0a0734d77827d4e7ce22421256a64d490bb3ce988b21c4  0.0s
 => [internal] load build context                                                                                  0.3s
 => => transferring context: 3.17kB                                                                                0.0s
 => CACHED [base 2/7] WORKDIR /app                                                                                 0.0s
 => CACHED [base 3/7] RUN apt-get -y update                                                                        0.0s
 => CANCELED [base 4/7] RUN apt-get -y upgrade                                                                     5.6s
 => CACHED [build 2/7] WORKDIR /src                                                                                0.0s
 => CACHED [build 3/7] COPY [mediere.csproj, .]                                                                    0.0s
 => CACHED [build 4/7] RUN dotnet restore "./mediere.csproj"                                                       0.0s
 => CACHED [build 5/7] COPY . .                                                                                    0.0s
 => CACHED [build 6/7] WORKDIR /src/.                                                                              0.0s
 => CACHED [build 7/7] RUN dotnet build "mediere.csproj" -c Release -o /app/build                                  0.0s
 => ERROR [publish 1/1] RUN dotnet publish "mediere.csproj" -c Release -o /app/publish                             4.7s
------
 > [publish 1/1] RUN dotnet publish "mediere.csproj" -c Release -o /app/publish:
#21 1.567 Microsoft (R) Build Engine version 16.11.2+f32259642 for .NET
#21 1.567 Copyright (C) Microsoft Corporation. All rights reserved.
#21 1.567
#21 2.460   Determining projects to restore...
#21 2.852   All projects are up-to-date for restore.
#21 3.883   mediere -> /src/bin/Release/net5.0/mediere.dll
#21 3.894   mediere -> /src/bin/Release/net5.0/mediere.Views.dll
#21 4.006   /bin/sh: 2: /tmp/tmp045a9cb1e4954d54b304a781ae210094.exec.cmd: npm: not found
#21 4.011 /src/mediere.csproj(38,5): error MSB3073: The command "npm install" exited with code 127.
------
executor failed running [/bin/sh -c dotnet publish "mediere.csproj" -c Release -o /app/publish]: exit code: 1

我的 dockerfile 是这样的:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 5000
#EXPOSE 5001

RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt install -y curl
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - 
RUN apt-get install -y nodejs build-essential

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["mediere.csproj", "."]
RUN dotnet restore "./mediere.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "mediere.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "mediere.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "mediere.dll"]

我期望它能够工作,因为我正在第 12 行安装 npm。

我观察到发布任务和 apt-get install 任务同时工作,并且我认为发布在 apt-get install 之前进行,这就是它不起作用的原因。但我可能是错的。

我该如何修复这个错误?

Thanks.


每个 Dockerfile 构建阶段都会启动FROM其他一些图像。当您使用 Node 时,构建阶段是

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
...
FROM build AS publish
RUN dotnet publish "mediere.csproj" -c Release -o /app/publish

在这个特定的包序列中,从 .NET SDK 映像开始直到您运行的点dotnet publish,但这从未真正安装 Node.js。

你安装 Node 的地方是base形象阶段。这已包含在final图像,但不在任何中间构建步骤中。

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
RUN apt-get install -y nodejs
FROM base AS final

如果您将 Angular 应用程序构建到静态文件中,然后从 .NET 应用程序提供它,则仅在构建和发布阶段需要 Node,但在最终应用程序中不需要。我建议在安装后立即安装FROM ... AS build线,特别是在你之前COPY任何进入图像的东西。如果由于代码更改而重建映像,这将避免重新安装 Node。

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
# do not install Node here

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
# Do install Node
# The default version in the Debian repositories should be fine
RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive \
    apt-get install --no-install-recommends --assume-yes \
      build-essential \
      nodejs

# Build your application as before
WORKDIR /src
...

FROM build AS publish
# Will include Node, because the `FROM ... AS build` stage installed it

FROM base AS final
# Will not include Node, because the `FROM ... AS base` stage did not
# install it
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker:“未找到 npm” 的相关文章

随机推荐

  • 将 youtube.com 中的视频嵌入到 iPhone 应用程序中

    我正在尝试将 youtube 视频嵌入到我的 iPhone 应用程序中 我正在使用 UIWebView 并将嵌入代码从 youtube 作为 html 字符串加载 所以我有一个带有基本 html 标记的布局 我将这段代码放在那里 问题是视频
  • 什么是 CSS 注入以及如何防止它?

    我听我的朋友谈论这个名为 CSS 注入 的漏洞 但是 我不知道这是什么 一听到它我就想 怎么可能使用 CSS 进行任何恶意活动或攻击 所以我想知道这个 CSS 注入 漏洞是什么以及如何预防它 它是什么 CSS 注入意味着攻击者设法将恶意 C
  • 在 Prolog 中查找图中两个节点之间的最短路径

    我想在 Prolog 中找到两个节点之间的最短路径 我想出了如何找到两个节点之间的所有路径 但不幸的是以下代码陷入了循环 arc a b arc b a arc b c arc c b arc c d arc d c path X Y ar
  • 是否可以在另一个语法定义中重复使用 boost::spirit::qi 语法?

    是否可以重复使用boost spirit qi另一种语法中的语法 例如作为规则 例如 如果我定义一个语法来将文本行解析为保存街道地址的结构 template lt typename iter gt struct address gramma
  • @SpringBootApplication - ComponentScan 在新的 Eclipse 项目中无法按预期工作

    我最近开始使用 Eclipse 从 IntelliJ Idea 迁移 但无论我开始编写新的 SpringBoot 应用程序 我总是遇到这个问题 我的主类上的 SpringBootApplication 未按预期工作 我应该能够在不添加 Co
  • CORS 请求在 docker-compose 环境中失败

    我希望弄清楚为什么在 Firefox 中运行的 React 应用程序中的 API 请求失败 标头如下 Accept Accept Encoding gzip deflate Accept Language en US en q 0 5 Co
  • 为什么 Kit Kat 需要使用 isValidFragment?

    自从 KitKat 发布以来 我注意到我的一大堆应用程序都更新了 修复 Kit Kat 中的崩溃 最近 当我发布自己的应用程序时 我发现其可能的来源是使用首选项活动的新 isValidFragment 要求 然而 我无法让任何人解释为什么突
  • 如何查询 postgres 的可选参数?

    我正在设置一个REST服务和我正在使用postgres作为数据存储 我想知道如何设置postgres查询以使用可选参数 IE SELECT from users where hair color 1 and eye color 2 其中 1
  • 支持 iOS 10 的 Xcode 7.3.1

    现在我有一个基于 Xcode 7 3 1 的应用程序 运行良好 但当我想将应用程序安装到 iOS 10 设备上时 出现了一个问题 提示 找不到开发人员磁盘映像 所以我找到了一个解决方案 如下 https danielemargutti co
  • React:为什么 `this.props.children` 未定义?

    我正在用 ReactJS 构建一个电子电阻计算器 我有一个组合组件声明如下 var ResistanceCalculator React createClass getInitialState function return bands 0
  • XSL if else 条件

    我有一个要求 我想要 if else 语句来检查节点是否具有属性或仅具有字符串 例如 1 个节点有0 File s found另一个具有诸如
  • 在 Kubernetes 中找不到持久卷声明

    目前我尝试实施持续量在我的 yaml 文件中 我在互联网上阅读了很多文档 但我不明白为什么当我进入仪表板窗格时会出现此消息 未找到持久卷声明 karaf conf pod yaml apiVersion v1 kind Pod metada
  • Linux 中 SVN 存储库目录放在哪里?

    我正在 Ubuntu Linux 上设置一个新的 SVN 服务器 放置存储库的好地方 最佳实践 在哪里 我应该创建一个新用户吗 服务器将通过 http 访问 因此无需创建用户帐户等 与 svn 的情况一样 提前谢谢了 我喜欢把东西放在下面
  • Python 访问 JSON 对象中的数据

    所以我在我的脚本中这样做 import json info json loads get info print info 哪个输出 richard richard desktop projects hello python python m
  • 将 libpq.5.dylib 复制到 /usr/lib/libpq.5.dylib

    我无法在 R 中加载包 因为该文件libpq 5 dylib不在 usr lib libpq 5 dylib 它是在 usr local Cellar libpq 13 0 lib libpq 5 dylib 我尝试了这一行 sudo ln
  • iframe 的内容文档

    对于 iframe 甚至旧的 frame 元素 contentDocument 到底代表什么 它相当于 html 元素还是 body 元素 它有什么用 所有浏览器都支持此属性吗 w3 org http www w3 org TR 2003
  • 开头括号中的正则表达式

    我有一个正则表达式试图按专业划分问题 假设我有以下正则表达式 P
  • AngularJS:用户身份验证后重新加载 ng-include (或解决问题的更好方法)

    我真的只是在学习 Angular 我正在尝试创建一个基于身份验证限制内容访问的应用程序 我的身份验证部分正在工作 也使用 Laravel PHP 框架 但我在根据身份验证状态 重新加载 某些内容时遇到问题 即在身份验证成功后 最初 我想做的
  • html 中表单布局的最佳实践——表格还是流程?

    在 html 中布局表单的最佳实践是什么 特别是当您有一组带有标签的字段和可能的错误指示器时 我能做的最好的事情就是使用表格 但这在面向 CSS 的布局设计中效果不佳 例如 table tr td Name td td td tr tabl
  • Docker:“未找到 npm”

    我正在尝试容器化 ASP NET Core 和 Angular 应用程序 但遇到了一些麻烦 我收到这些错误 gt internal load build definition from Dockerfile 0 4s gt gt trans