簡體   English   中英

NodeJS中的NodeJS Mongodb compose = ECONNREFUSED

[英]NodeJS Mongodb in docker compose = ECONNREFUSED

我試圖通過docker-compose建立一個與MongoDB容器鏈接的Node.JS容器,但系統地node.js返回一個ECONNREFUSED錯誤。

錯誤

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代碼

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

泊塢窗,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)

FROM node

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

我該如何解決錯誤?

我解決了我的問題:

我嘗試在mongodb服務器完全啟動之前設置我的連接(從節點)到mongodb(第一次啟動需要5/6秒)。

因此,在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