从节点映像运行 docker 容器时找不到 Npm
Posted
技术标签:
【中文标题】从节点映像运行 docker 容器时找不到 Npm【英文标题】:Npm not found when running docker container from node image 【发布时间】:2018-02-04 09:07:37 【问题描述】:# Dockerfile
FROM node:7-alpine
RUN mkdir -p /src/app
WORKDIR /src/app
COPY package.json /src/app/package.json
RUN npm install
COPY . /src/app
EXPOSE 3000
CMD ['npm', 'start']
我正在尝试使用上面的 Dockerfile 为 Dockerizing nodejs 应用程序完成 katacoda.com 练习。构建完成但运行映像立即退出,并且在我看到的 docker 日志中:
/bin/sh: [npm,: not found
我尝试使用 docker -it nodeapp /bin/bash
在交互模式下运行容器,这引发了错误 docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory".
所以我不确定这里发生了什么。
【问题讨论】:
尝试docker -it nodeapp sh
然后which npm
看看是否安装了npm
因为 alpine 没有 bash 因此出现上述错误。尝试使用sh
并在您进入后查看npm
感谢@TuanAnhTran docker -it nodeapp sh
工作,npm 已安装,npm start 工作
那么docker run ....
怎么没有呢?
我将其更改为CMD npm start
,现在可以使用了。
【参考方案1】:
不起作用的原因是单引号
CMD ['npm', 'start']
应该是
CMD ["npm", "start"]
不使用双引号时,docker会去掉单引号,将命令处理为[npm, start]
这就是为什么您会看到错误 [npm,
: not found
【讨论】:
【参考方案2】:我有同样的症状,但问题略有不同。写在这里以防谷歌在我的情况下将其他人引导到此链接对我来说,问题是忘记CMD
中的逗号。所以解决方案是从CMD ["npm" "start"]
到CMD ["npm", "start"]
。
【讨论】:
我不敢相信自己犯了这个愚蠢的错误以上是关于从节点映像运行 docker 容器时找不到 Npm的主要内容,如果未能解决你的问题,请参考以下文章
使用 Palantir Gradle 插件构建 Docker 容器时找不到 .jar 文件
Docker /bin/bash: nodemon: 找不到命令
npm:在 Electron 应用程序中执行命令时找不到命令