【问题标题】:NodeJS Mongodb in docker compose = ECONNREFUSEDdocker compose = ECONNREFUSED 中的 NodeJS Mongodb
【发布时间】:2019-05-07 15:13:51
【问题描述】:

我尝试通过 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);

docker-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

我该如何解决这个错误?

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    我解决了我的问题:

    我尝试在 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();
    

    【讨论】:

    • 你也可以使用 wait-for-it 或 dockerize 之类的东西。例如:entrypoint: ./wait-for-it.sh mongo:27017 -- npm start
    【解决方案2】:

    你应该使用:

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

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 2020-02-03
      • 2021-02-07
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2019-02-19
      • 2018-10-30
      相关资源
      最近更新 更多