2

我正在尝试对node我拥有的使用mongodb实例的应用程序进行 dockerize。我试图指出它,'mongodb://mongo:27018/eugenie_cp'但它一直在127.0.0.1:27017

我已经关注了这两个可能被标记为重复的问题,但我已经使用了那里的答案:

无法通过 Docker 中的 node.js 连接到 MongoDB

MongoDB 与 Docker “首次连接时无法连接到服务器 [localhost:27017]”

由于以下行,我收到错误,但我无法解决它。

// call express middleware
var express = require('express');
//Initialize the app.
var app = express();

//setting the mongoose options.
var options = {
    useMongoClient: true,
    server: {
        socketOptions: {
            socketTimeoutMS: 0,
            connectTimeout: 0
        }
    },
    server: {
        reconnectTries: 1000
    },
    replset: {
        socketOptions: {
            socketTimeoutMS: 0,
            connectTimeout: 0
        }
    }
};

// Mongo instance here.
var mongoose = require('mongoose');
// setting the MongoDb connection URL / string
var mongodb_connection_url = 'mongodb://mongo:27017/eugenie_cp';
// connect to our database
mongoose.connect(mongodb_connection_url, options);

// MongoDb connection error check
var db_check = mongoose.connection;
db_check.on('error', console.error.bind(console, 'MongoDB connection error:'));

我收到以下错误:

app      | MongoDB connection error: Error [MongoError]: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017
app      |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
app      |   name: 'MongoError',
app      |   message: 'connect ECONNREFUSED 127.0.0.1:27017'
app      | }]

我的docker-compose.yml

version: "3"
services:
    app:
        depends_on:
            - mongo
        container_name: app
        restart: always
        build: .
        ports:
            - "3002:3002"
        links:
            - mongo
    mongo:
        container_name: mongo
        image: mongo:3.2
        volumes:
            - ./data:/data/db
        ports:
            - "27018:27017"

我该如何解决这个错误?

4

1 回答 1

2

在 docker 链接或 docker-compose 网络中,您不应使用发布端口,在服务到服务的通信中,您必须使用公开端口或其他单词容器端口,而不是主机端口。

所以更新连接字符串。

var mongoose = require('mongoose');
var mongodb_connection_url = 'mongodb://mongo:27017/eugenie_cp';
mongoose.connect(mongodb_connection_url, options);

编辑:

主要问题是由于代码被缓存。我们用一个简单的.js程序测试了连接,它最终指向了正确的位置,并给了我们代码没有被刷新的想法。我想,缓存失效是计算机的大问题之一。

首先开始mongo

$ docker-compose up --build -d mongo
$ docker-compose up --build -d app

它奏效了。

于 2019-10-14T18:14:50.530 回答