【问题标题】:/bin/sh: 1: [“npm”,: not found on docker-compose up [duplicate]/bin/sh:1:[“npm”,:在 docker-compose up 上找不到 [重复]
【发布时间】:2018-01-11 01:00:25
【问题描述】:

我是 docker 新手,正在尝试为节点应用创建容器。

我关注了这些tutorial,但在docker-compose up 上我总是收到这些错误:

Creating app ... done
Attaching to app
app    | /bin/sh: 1: [“npm”,: not found
app exited with code 127

这是我的 Dockerfile:

FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY package-lock.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 3000
CMD ["npm", "start"]

还有我的 docker-compose.yml:

version: "2"
services:
  app:
    container_name: app
    restart: always
    build: .
    ports:
      - "3000:3000"

有人知道如何解决这个错误吗?

【问题讨论】:

  • “npm” 不是"npm"。如果您的 Dockerfile 中有“智能引号”,它不会将字符串解析为 JSON,因此它会尝试在 shell 中运行它——导致此处引用的错误。

标签: node.js docker docker-compose dockerfile


【解决方案1】:

您的 dockerfile 中有错误的引号:

app    | /bin/sh: 1: [“npm”,: not found

与您粘贴的示例中的引号不匹配:

CMD ["npm", "start"]

仔细检查您的 Dockerfile 以更正您的报价。

【讨论】:

  • 我对是否将其作为问题的副本关闭存在分歧,其中有人在稍微不同的上下文中使用智能引号与常规引号。
  • @CharlesDuffy 我可以将其标记为以下内容的副本:stackoverflow.com/questions/44077815/…。如果你标记它,我会支持它(我的投票对 docker 标签具有约束力,所以不想采取单方面行动)。
  • 我已经替换了括号,但我必须运行 docker-compose up --force-recreate 来应用更改
  • 我不记得读过需要双引号的地方。我正在使用CMD ['npm', 'start'] 并得到同样的错误。这可以通过更改为双引号来解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 2018-08-10
  • 2017-02-07
  • 2020-03-03
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多