错误的ERR!缺少脚本:使用Docker启动错误

时间:2017-07-09 21:25:00

标签: node.js docker npm docker-compose

运行docker-compose以启动我的应用时,尽管指定了启动脚本,但我得到npm ERR! missing script: start

package.json是

{
  "name": "myapp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.17.1",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.3",
    "ejs": "~2.5.6",
    "express": "~4.15.2",
    "mongoose": "^4.11.1",
    "morgan": "~1.8.1",
    "serve-favicon": "~2.4.2"
  }
}

和docker-compose.yml是

version: "2"
services:
  web:
    build: .
    volumes:
      - ./:/app
    ports:
      - "3500:3500"

有两件事对我没有意义:

  1. 使用Dockerfile启动应用程序:如果缺少启动脚本确实是问题,那么这不应该也会失败吗?
  2. package.json确实有一个启动脚本,如上所示
  3. 不确定是否需要,但Dockerfile是

    FROM node:argon
    
    RUN mkdir /app
    
    WORKDIR /app
    
    COPY package.json /app
    
    RUN npm install
    
    COPY . /app
    
    EXPOSE 3500
    
    ENV PORT 3500
    CMD ["npm", "start"]
    

    编辑:我正在使用docker run -p 3500:3500 appdocker-compose up

    我是新手,所以可能会遗漏一些东西,但现在有点卡住了。

4 个答案:

答案 0 :(得分:1)

您可以尝试删除卷部分 - ./:/app
看起来/ app是在容器中创建的,但随后您将主机目录挂载到/ app,从而将原始/ app隐藏在容器中。

答案 1 :(得分:0)

您收到的错误是您看不到./bin/www目录。

请遵循以下步骤。

  1. 在./bin/www目录中。
  2. 如果没有。您必须创建。
  3. 如果有。您必须检查它是否正在运行。

希望我能对您有所帮助。

答案 2 :(得分:0)

添加

"docker":xxxxx
"docker-build":xxxxx

这样的地雷

"docker": "node --experimental-modules ./signal-server",
"docker-build": "docker build -t node-web-development/signalauth ."

您的程序包json文件

答案 3 :(得分:0)

检查与定义“开始”脚本的package.json文件所在的目录中是否存在docker-compose.yml文件。如果不是,那可能是导致错误的原因,因为您正在将当前目录装载到容器的应用程序目录中。更好的设置是将节点应用程序放在其自己的子目录中,并在其中放置docker-compose文件。然后,可以通过将其提供给docker-compose.yml文件的构建条目来指向节点应用程序目录:

version: "2"
services:
  web:
    build: ./yourNodeAppDir
    volumes:
      - ./:/app # is this necessary?
    ports:
      - "3500:3500"