简体   繁体   English

NodeJS中的NodeJS Mongodb compose = ECONNREFUSED

[英]NodeJS Mongodb in docker compose = ECONNREFUSED

I try to up a Node.JS container linked with a MongoDB container by docker-compose, but systematically node.js return an ECONNREFUSED error. 我试图通过docker-compose建立一个与MongoDB容器链接的Node.JS容器,但系统地node.js返回一个ECONNREFUSED错误。

The error 错误

nodejs_1   | /code/node_modules/mongoose/node_modules/mongodb/lib/server.js:228
nodejs_1   |         process.nextTick(function() { throw err; })
nodejs_1   |                                   
nodejs_1   | Error: connect ECONNREFUSED
nodejs_1   |     at exports._errnoException (util.js:746:11)
nodejs_1   |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)

NodeJS code NodeJS代码

var db = 'mongodb://database:27017/wondrapi';
mongoose.connect(db);

docker-compose.yml 泊坞窗,compose.yml

web:
  build: ./web
  ports:
    - "8080:80"
  links:
    - nodejs
  volumes:
    - ./web:/usr/share/nginx/html:ro
nodejs:
  build: ./api
  ports:
    - "8081:3000"
  links:
    - database
  command: npm start
database:
  image: mongo
  volumes:
    - db:/data/db
  ports:
    - 27017

Dockerfile (./api) Dockerfile(./ api)

FROM node

ADD package.json /code/
WORKDIR /code
RUN npm install
ADD . /code

How can I solve the error? 我该如何解决错误?

I solve my problem: 我解决了我的问题:

I try to setup my connection (from node) to mongodb before the mongodb server was completely up (it take 5/6 secs for the first start). 我尝试在mongodb服务器完全启动之前设置我的连接(从节点)到mongodb(第一次启动需要5/6秒)。

So, i just need to retry the connection few times (3/4 times) with 1 sec before each requests from node before mongo accept the request. 因此,在mongo接受请求之前,我只需要在节点的每个请求之前用1秒重试连接几次(3/4次)。

var connectWithRetry = function() {
    return mongoose.connect(db, function(err) {
        if (err) {
            console.error('Failed to connect to mongo on startup - retrying in 1 sec', err);
            setTimeout(connectWithRetry, 1000);
        }
    });
};
connectWithRetry();

你应该使用:

docker stack deploy --compose-file <compose-file-name> <app-name>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM