node.js -/bin/sh : npm: command not found

标签 node.js docker npm nvm

我正在为stf创建一个docker镜像。直接使用apt-get install nodejs安装nodejs,遇到了很多问题。所以我决定采用nvm方式。但是安装后RUN npm install失败 我正在使用 su 用户名 docker build 构建 docker 镜像..

make sure apt is up to date
RUN apt-get update --fix-missing
RUN apt-get install -y curl
RUN sudo apt-get install -y build-essential libssl-dev
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 6

# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

#WORKDIR /usr/app


# Install app dependencies
RUN npm install

和输出

=> Downloading nvm from git to '/usr/local/nvm'
=> Cloning into '/usr/local/nvm'...
* (HEAD detached at v0.30.1)
  master

=> Appending source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm
Downloading https://nodejs.org/dist/v6.13.0/node-v6.13.0-linux-x64.tar.xz...
######################################################################## 100.0%
WARNING: checksums are currently disabled for node.js v4.0 and later
Now using node v6.13.0 (npm v3.10.10)
default -> 6 (-> v6.13.0)
Now using node v6.13.0 (npm v3.10.10)
Removing intermediate container eb9cb6c46f34
 ---> eeef6bf9f0f1
Step 38/52 : ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
 ---> Running in 185bef8e530c
Removing intermediate container 185bef8e530c
 ---> 0e5bf7b1cfd9
Step 39/52 : ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
 ---> Running in 00d58493e199
Removing intermediate container 00d58493e199
 ---> 81ed9823020b
Step 40/52 : RUN npm install
 ---> Running in 1c7577133e24
/bin/sh: npm: command not found
The command '/bin/sh -c npm install' returned a non-zero code: 127

请帮忙。谢谢

运行容器并检查 NPM 路径

root@69e513b99e68:/home/mobile/MobileFarmDocker#

 echo $PATH
/usr/local/nvm/versions/node/v6.13.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

root@69e513b99e68:/home/mobile/MobileFarmDocker# which npm
/usr/local/nvm/versions/node/v6.13.0/bin/npm

最佳答案

您的 $NODE_VERSION 变量的值为 6,如 Dockerfile 中所定义 (ENV NODE_VERSION 6),但它应为 6.13.0 以便以下行可以正常工作:

ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

(映射到/usr/local/nvm/versions/node/v6.13.0/bin)

否则,您实际上会生成以下(错误)路径:

/usr/local/nvm/versions/node/v6/bin

关于node.js -/bin/sh : npm: command not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070755/

相关文章:

node.js - 在 Nest.js 中创建动态模块时,我应该使用 registerAsync 还是 forRootAsync?

docker - 看板Docker SSL

javascript - Node.js/socket.io 设计困惑

python - ImportError:libgthread-2.0.so.0:无法打开共享对象文件:使用Docker容器导入cv2时没有此类文件或目录

docker - .NET Core 2.2 Docker Core转储故障排除

node.js - npm 安装失败,错误代码为 "Cannot find module ' glob'"

node.js - 使用 Git Deploy 将 Ghost 0.4.2 部署到 Azure 站点

linux - 通过 nvm 升级 Node 后 Node 调试中断

node.js - 避免使用 localhost 来解析 mocha 中的测试

node.js - 如何使用 node.js 将作者、标题和缩略图等标签添加到 .m4a 音频文件?