【问题标题】:Cannot run node: No such file or directory无法运行节点:没有这样的文件或目录
【发布时间】:2020-09-23 08:49:07
【问题描述】:

我在映像 maven:3-alpine 的 docker 容器内执行 mvn clean install 以构建应用程序。在 pom.xml 中我使用了frontend-maven-plugin,因为我需要安装nodenpm,然后运行npm install 来构建前端(角度)。

 <plugin>
        <groupId>com.github.eirslett</groupId>
        <artifactId>frontend-maven-plugin</artifactId>
        <version>1.9.1</version>
        <configuration>
          <nodeVersion>v12.16.1</nodeVersion>
        </configuration>
        <executions>
          <execution>
            <id>install node and npm</id>
            <goals>
              <goal>install-node-and-npm</goal>
            </goals>
            <phase>generate-resources</phase>
          </execution>
          <execution>
            <id>npm install</id>
            <goals>
              <goal>npm</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
              <arguments>install</arguments>
              <installDirectory>./</installDirectory>
            </configuration>
          </execution>
          <execution>
            <id>ng build</id>
            <goals>
              <goal>npm</goal>
            </goals>
            <phase>compile</phase>
            <configuration>
              <arguments>run-script build</arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>

Node 和 npm 会正确安装,但运行时 npm install 会返回错误:Failed to run task: 'npm install' failed. java.io.IOException: Cannot run program "/var/lib/jenkins/workspace/myProject/node/node" (in directory "/var/lib/jenkins/workspace/myProject"): error=2, No such file or directory -&gt; [Help 1]

如果我进入容器 (docker exec) 并尝试手动运行 npm install 它再次给我同样的错误。当我检查节点是否正确安装时,我看到文件/var/lib/jenkins/workspace/myProject/node/node 在那里,但是当我自己尝试从/node 目录中运行节点时,假设node -v 它再次告诉我No such file or directory。我不明白为什么会这样,因为节点在那里!!当前用户也有权执行该文件。

我对这个问题进行了一些搜索,有人说以这种方式在 ubuntu 上安装节点不是正确的方法,但这只发生在我的容器中。如果我在我的本地机器(它也是一个 ubuntu)上尝试相同的操作,那么 node 可以工作。

【问题讨论】:

  • 文件模式下是否设置了执行位?
  • 看起来像这样:-rwxr-xr-x 1 root root 46228688 Jun 4 10:40 node drwxr-xr-x 3 108 112 4096 Jun 3 13:37 node_modules -rwxr--r- - 1 108 112 893 Jun 3 13:37 npm -rwxr--r-- 1 108 112 464 Jun 3 13:37 npm.cmd 我尝试以 root 身份运行它。

标签: node.js docker maven ubuntu npm


【解决方案1】:

当您自己运行node -v 时,它会尝试在您的PATH 上查找节点。以这种方式通过 maven 安装不会为您这样做

Check out one of these answers,了解如何在 Linux 上执行此操作。

如果您的用户没有执行此操作的权限(我怀疑您在 jenkins 中运行可能是这种情况),您可以改为使用节点和 npm 二进制文件的完整或相对路径运行所需的命令。

例如如果您在目录/var/lib/jenkins/workspace/myProject 中有一个文件test.js,则可以在该目录中运行:

./node/node test.js

/var/lib/jenkins/workspace/myProject/node/node

另外:在 CI 环境中使用 Maven 安装 NPM 和 Node 的更好解决方案是使用 nvm、Docker 映像或 Jenkins use the Node.js plugin

【讨论】:

  • 正如我所说,我也尝试在我的主机上启动同一个容器并尝试使用docker exec 进入它并尝试以root用户执行节点。它不适用于绝对路径或相对路径。我也知道还有其他方法可以做到,但是我仍然需要了解这里的问题所在。整个事情都在使用 ubuntu 在我的主机上运行,​​为什么它不能使用 alpine docker 映像?!
  • 抱歉,您的问题并不清楚,您只是说“但是当我尝试手动运行时,比如说 node -v” - 以为您正在尝试自己执行该命令跨度>
  • 是的,对不起。我编辑了我的问题以使其更清楚。谢谢。
【解决方案2】:

我也遇到了同样的问题。显然 alpine 不适用于 nodejs 二进制文件。 https://github.com/eirslett/frontend-maven-plugin/issues/633 似乎有一些解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多