为什么我的docker节点容器退出

Aid*_*wen 7 node.js docker docker-compose

我正在尝试使用docker-compose运行节点容器 -

services:
  node:
    build:
      context: nodejs/
    ports:
      - "3000:3000"
    volumes: 
      - ../nodejs:/usr/src/app
    working_dir: '/usr/src/app'
Run Code Online (Sandbox Code Playgroud)

我的码头文件

FROM node:6.10
EXPOSE 3000
Run Code Online (Sandbox Code Playgroud)

问题是它立即退出 -

$ docker-compose up
Starting docker_node_1
Attaching to docker_node_1
docker_node_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)

日志中docker logs docker_node_1没有任何内容- 什么都不返回.

有一个引用主脚本的package.json -

{
  ...
  "main": "server.js",
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的主要脚本只是一个简单的快递服务器 -

const express = require('express');
const app = express();
const port = 3000;

app.listen(port, (err) => {  
  if (err) {
    return console.log('something bad happened', err);
  }

  console.log(`server is listening on ${port}`);
});
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些明显的东西,但我看不出它是什么......

Rob*_*ert 8

你没有指定你的码头工人command.这是代表container以下几个关键过程的关键概念(过程=命令,你的程序)

你可以在Dockerfile中做到这一点:

CMD npm start
Run Code Online (Sandbox Code Playgroud)

或者在docker-compose.yml中:

services:
  node:
    command: npm start
    build:
      context: nodejs/
    ports:
      - "3000:3000"
    volumes: 
      - ../nodejs:/usr/src/app
    working_dir: '/usr/src/app'
Run Code Online (Sandbox Code Playgroud)

两种方法都是等价的.但是根据需要编辑它(npm run,npm run build等)