gpt4 book ai didi

node.js - docker compose = ECONNREFUSED 中的 NodeJS Mongodb

转载 作者:IT老高 更新时间:2023-10-28 13:36:01 25 4
gpt4 key购买 nike

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

我该如何解决这个错误?

最佳答案

我解决了我的问题:

我尝试在 mongodb 服务器完全启动之前设置我的连接(从 Node )到 mongodb(第一次启动需要 5/6 秒)。

所以,在 mongo 接受请求之前,我只需要在 Node 的每个请求之前 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();

关于node.js - docker compose = ECONNREFUSED 中的 NodeJS Mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com