代码之家  ›  专栏  ›  技术社区  ›  Stepan Yakovenko

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

  •  0
  • Stepan Yakovenko  · 技术社区  · 6 年前

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

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

    {
      "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" }
    }
    

    服务器JS:

    var mongo = require('mongodb');
    var monk = require('monk');
    var db = monk('mongo:27017/nodetest1');
    db.then(function(){console.log("hello"});
    

    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]
    

    取决于

    2 回复  |  直到 6 年前
        1
  •  1
  •   Stepan Yakovenko    6 年前

    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();
    
        2
  •  0
  •   6be709c0    6 年前

    使用网络:

    # Create the network
    docker network create myapp
    
    # Launch mongo
    docker run -d --name mongo --network=myapp mongo
    
    # Launch Web
    docker run -d --name web --network=myapp -p 8080:8080 myAppNameBuilt
    

    无论如何,这是实现