【问题标题】:docker-compose with Node and Mongo doesn't start both带有 Node 和 Mongo 的 docker-compose 不会同时启动
【发布时间】:2020-04-19 07:55:48
【问题描述】:

症状:

  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) 我收到以下错误

(node:25) UnhandledPromiseRejectionWarning: MongoTimeoutError: 服务器选择在 30000 毫秒后超时 在 Timeout._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() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1) (节点:25)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 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 } );

【问题讨论】:

  • 如果您运行docker-compose up,您是否看到来自 MongoDB 的启动消息?您将应用程序容器标记为restart: always;如果您等待一两分钟(然后让它重新启动),它最终会出现吗?
  • 从来没有提到过mongo。但是您的问题让我认为这不是 mongo 没有启动的事实,而是节点应用程序没有完全启动。这一次,当我杀死节点容器时,我看到了ERROR: Service 'iotmap' failed to build: The command '/bin/sh -c npm start' returned a non-zero code: 137,这让我检查了Dockerfile。我将RUN npm start 更改为CMD [ "npm", "start" ],瞧,一切都像魅力一样开始!

标签: node.js mongodb docker docker-compose


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    相关资源
    最近更新 更多