节点容器无法连接到mongo容器

时间:2019-10-14 17:29:46

标签: node.js docker docker-compose

我正在尝试将我拥有的使用node实例的mongodb应用程序码头化。我试图将其指向'mongodb://mongo:27018/eugenie_cp',但它一直指向127.0.0.1:27017

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

Cannot connect to MongoDB via node.js in Docker

MongoDB on with Docker "failed to connect to server [localhost:27017] on first connect "

由于以下几行而出现错误,但我无法解决。

// 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"

如何解决此错误?

1 个答案:

答案 0 :(得分:3)

在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

它奏效了。