Dockerfile - npm:未找到

Posted

技术标签:

【中文标题】Dockerfile - npm:未找到【英文标题】:Dockerfile - npm: not found 【发布时间】:2018-10-09 20:44:19 【问题描述】:

我想为 reactjs 应用程序创建一个开发环境。我是 Docker 新手,一直在尝试使用 Docker 创建环境。下面是我的 Dockerfile 代码。

# Base node image
FROM node

# create working directory
ADD ./code /usr/src/app
WORKDIR /usr/src/app

# add node_modules path to environment
ENV PATH /usr/src/app/node_modules/.bin:PATH

# copy and install dependencies
COPY ./code/package.json /usr/src/app/package.json
RUN npm install --quiet
RUN npm install react-scripts@1.1.1 -g --silent

# start app
# CMD ["npm","start"]

但是,我在RUN npm install --quiet 行收到错误“npm: not found”。

【问题讨论】:

或者用yarn,它自带yarn :) 【参考方案1】:

我确认node自带npm:

$ docker run -it --rm node /bin/bash
root@b35e1a6d68f8:/# npm --version
5.6.0

但是行

ENV PATH /usr/src/app/node_modules/.bin:PATH

覆盖初始 PATH,因此您应该尝试将其替换为

ENV PATH /usr/src/app/node_modules/.bin:$PATH

另外,请注意您的ADD ./code ... 行很笨拙,因为它会添加您的应用程序的所有文件(包括./code/package.json!)而且这一步来得太早(wrt Docker 的缓存机制),所以我建议只需删除该行 ADD ./code /usr/src/app 并添加一行 COPY ./code ./ RUN npm install ...

最后,您可能还想查看“dockerizing”Node.js 应用程序的官方文档:https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

【讨论】:

谢谢伙计。它工作得非常好。但是,在将 package.json 复制到 app 目录后,我有一个疑问,Docker 是如何理解在 app 目录中执行 npm install 的。因为我们没有在代码中明确地 cd dirname。 @SanketR 仅供参考,WORKDIR /dir Docker 命令基本上等同于mkdir -p /dir && cd /dir Bash 命令。并且为同一构建的所有后续 Docker 命令保留更改的目录... 非常感谢。这确实是有用的信息。 Docker 命令似乎很混乱。你拯救了我的一天。

以上是关于Dockerfile - npm:未找到的主要内容,如果未能解决你的问题,请参考以下文章

Docke--Dockerfile实践

docke--Dockerfile构建docker镜像

Docke--Dockerfile 构建LNMP环境

环境变量未在 dockerfile 中提取

Xamarin.Mac:关闭的窗口未重新打开以单击 Dock 中的应用程序图标

Gitlab CI 失败:未找到 NPM 命令