Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js docker compose中的NodeJS Mongodb=EconRefused_Node.js_Mongodb_Docker_Docker Compose - Fatal编程技术网

Node.js docker compose中的NodeJS Mongodb=EconRefused

Node.js docker compose中的NodeJS Mongodb=EconRefused,node.js,mongodb,docker,docker-compose,Node.js,Mongodb,Docker,Docker Compose,我试图通过docker compose创建一个与MongoDB容器链接的Node.JS容器,但Node.JS系统性地返回一个EconRecursed错误 错误 nodejs_1 | /code/node_modules/mongoose/node_modules/mongodb/lib/server.js:228 nodejs_1 | process.nextTick(function() { throw err; }) nodejs_1 |

我试图通过docker compose创建一个与MongoDB容器链接的Node.JS容器,但Node.JS系统性地返回一个EconRecursed错误

错误

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)

如何解决错误?

我可以解决我的问题:

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

因此,在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堆栈部署--编写文件

您也可以使用类似或dockerize的内容。例如:
entrypoint:./wait-it.sh mongo:27017——npm启动
docker stack deploy --compose-file <compose-file-name> <app-name>