Mongodb MongoError:无法在第一次连接时连接到服务器[mongo:27017]

Mongodb MongoError:无法在第一次连接时连接到服务器[mongo:27017],mongodb,docker,Mongodb,Docker,Docker配置: FROM node:8 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD [ "npm", "start" ] Docker compose: version: "2" services: web: build: . depends_on: - mongo mongo: image: mongo ports:

Docker配置:

FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "npm", "start" ]
Docker compose:

version: "2"
services:
  web:
    build: .
    depends_on:
    - mongo
  mongo:
    image: mongo
    ports:
    - "27017:27017"
package.json:

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "",
  "author": "Stepan Yakovenko <stiv.yakovenko@gmail.com>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {"express": "^4.16.1","mongodb": "~3.0.1","monk": "~6.0.5" }
}
大多数情况下,它都能工作,但如果我清除docker缓存,它通常不会工作,并会给我以下信息:

web_1    | (node:15) UnhandledPromiseRejectionWarning: MongoError: failed to connect to server [mongo:27017] on first connect [MongoErr
or: connect ECONNREFUSED 172.18.0.2:27017]
我认为docker所依赖的根本原因并不能保证mongo已经开始监听,因为在这种情况下,我在这个错误后从mongo收到监听消息。我怎样才能解决这个问题?docker对这种情况有什么解决办法吗?或者我如何让mongo尝试永远连接


Thanx

这是重新连接代码的示例,对我来说很有用:

var connect = function () {
    var db = monk('mongo:27017/nodetest1');
    db.then(function () {
        console.log("connected");
    }).catch(function () {
        // sometimes node starts before mongo, so we have to reconnect in case of error
        connect();
    });
};
connect();
var connect = function () {
    var db = monk('mongo:27017/nodetest1');
    db.then(function () {
        console.log("connected");
    }).catch(function () {
        // sometimes node starts before mongo, so we have to reconnect in case of error
        connect();
    });
};
connect();