docker 中的 NodeJS Mongodb 撰写 = ECONNREFUSED
NodeJS Mongodb in docker compose = ECONNREFUSED
我尝试通过 docker-compose 建立一个与 MongoDB 容器链接的 Node.JS 容器,但系统地 node.js return 一个 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 服务器完全启动之前设置我的连接(从节点)到 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>
我尝试通过 docker-compose 建立一个与 MongoDB 容器链接的 Node.JS 容器,但系统地 node.js return 一个 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 服务器完全启动之前设置我的连接(从节点)到 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>