使用Node和Mongo的docker-compose不会同时启动

时间:2019-12-30 15:19:23

标签: node.js mongodb docker docker-compose

症状:

  1. 如果我运行docker-compose run mongo,Mongo可以正常运行
  2. 如果我运行docker-compose run iotmapdocker-compose up,则只有节点启动,而不是Mongo容器加

2a)docker-compose ps不显示任何内容,docker ps显示

e968900e41cc        6e70e14f1339        "/bin/sh -c 'npm sta…"   3 minutes ago       Up 2 minutes        3000/tcp            priceless_hawking

2b)我收到以下错误

(节点:25)UnhandledPromiseRejectionWarning:MongoTimeoutError:服务器选择在30000 ms之后超时     在超时时._onTimeout(/usr/src/app/node_modules/mongodb/lib/core/sdam/server_selection.js:309:9)     在listOnTimeout上(internal / timers.js:537:17)     在processTimers上(internal / timers.js:481:7) (节点:25)UnhandledPromiseRejectionWarning:未处理的承诺被拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict(请参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝ID:1) (节点:25)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。 错误:正在中止。

docker-compose.yml:

volumes:
  mongodata:
services:
  iotmap:
    container_name: iotmap
    build: .
    restart: always
    ports:
      - "3000:3000"
    links:
      - mongo
    depends_on:
      - mongo
  mongo:
    container_name: mongo
    image: mongo:latest
    restart: always
    ports:
      - "27017:27017"
    volumes:
     - mongodata:/data/db

和Dockerfile:

FROM node:latest
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install --no-optional --no-shrinkwrap --no-package-lock
COPY . /usr/src/app
EXPOSE 3000
RUN npm start

和在app.js中:

mongoose.connect( "mongodb://mongo:27017/iotmap", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true } );

1 个答案:

答案 0 :(得分:0)

RUN npm start更改为CMD [ "npm", "start" ],一切开始就像一个魅力!