【问题标题】:cannot build docker image无法构建 docker 镜像
【发布时间】:2017-09-15 18:43:40
【问题描述】:

我一直在尝试使用此 Dockerfile 构建 Docker 映像:

FROM mhart/alpine-node:base-6

MAINTAINER techhadmin

COPY ./package.json src/

RUN cd src && npm install 

COPY . /src 

WORKDIR /src

EXPOSE 3000
CMD ["npm", "start"]

但我收到此错误:

/bin/sh: npm: 未找到
命令 '/bin/sh -c cd src && npm install' 返回一个非零代码:127

知道如何解决这个问题吗?

【问题讨论】:

    标签: node.js docker devops alpine


    【解决方案1】:

    阅读文档:

    https://hub.docker.com/r/mhart/alpine-node/

    写的是:

    #如果你需要npm,不要使用base标签

    # 运行 npm 安装

    所以不要使用base-6 标签并将FROM 图像更改为7 之类的东西

    FROM mhart/alpine-node:7
    

    【讨论】:

      【解决方案2】:

      您看到此错误消息是因为当您尝试运行 npm install 时,没有可用的 npm 副本。

      您正在使用alpine 作为基础映像。

      默认情况下,alpine 是一个小图像,因此其中包含一组有限的默认程序。 alpine 图像中有哪些程序?不多。

      因此,如果您尝试使用 Nodejs 运行 alpine 图像,则需要做额外的工作。

      要解决这个问题,您有两种选择:

      1. 查找不同的基本映像。 - 你可以尝试找到一个已经有 Node 和 NPM 的基础镜像。

      2. 运行 alpine 并使用一些其他命令尝试在其中安装 npm

      使用别人的作品或从头开始构建它。

      我建议找到一个预先配置有npm 的图像。您可以导航到 DockerHub,这是一个图像存储库。

      DockerHub中有一个官方的Node仓库。

      https://hub.docker.com/_/node

      所以你可以这样做:

      # Specify base image
      FROM node:alpine
      
      # Install some dependencies
      RUN npm install
      
      # Setup default command
      CMD ["npm", "start"]
      

      node:alpine 的好处是你不会得到任何额外的不必要的包,只是 Nodejs 的绝对精简版本,除了诸如ping 命令、cat、@987654335 之类的基本功能之外没有其他任何东西@等等。

      【讨论】: