【问题标题】:Npm not found when running docker container from node image从节点映像运行 docker 容器时找不到 Npm
【发布时间】: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,现在可以使用了。

标签: node.js bash docker npm


【解决方案1】:

不起作用的原因是单引号

CMD ['npm', 'start']

应该是

CMD ["npm", "start"]

不使用双引号时,docker会去掉单引号,将命令处理为[npm, start]

这就是为什么您会看到错误 [npm, : not found

【讨论】:

    【解决方案2】:

    我有同样的症状,但问题略有不同。写在这里以防谷歌在我的情况下将其他人引导到此链接对我来说,问题是忘记CMD 中的逗号。所以解决方案是从CMD ["npm" "start"]CMD ["npm", "start"]

    【讨论】:

    • 我不敢相信自己犯了这个愚蠢的错误
    猜你喜欢
    • 2019-08-30
    • 2020-10-04
    • 2019-06-26
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多