【问题标题】:Node container not able to connect to mongo container节点容器无法连接到 mongo 容器
【发布时间】:2019-10-14 17:29:46
【问题描述】:

我正在尝试对我拥有的使用 mongodb 实例的 node 应用程序进行 dockerize。我试图将其指向'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"

我该如何解决这个错误?

【问题讨论】:

  • 该错误与您显示的 node.js 代码不匹配。请检查您是否正在执行正确的代码。
  • @michalk 我已经更新了我的代码

标签: node.js docker docker-compose


【解决方案1】:

在 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

它奏效了。

【讨论】:

  • 我进行了更改,然后docker build -t cpde_eugenie .docker-compose up,但我仍然得到同样的错误。我也在问题中更新了它
  • 您确定 mongo 容器正在运行吗? docker-compose logs 的日志是什么?
  • 还有数据库吗?你没有传递数据库名和用户名? ` MONGO_INITDB_ROOT_USERNAME:根 MONGO_INITDB_ROOT_PASSWORD:示例`
  • 上面写着Listening on 0.0.0.0waiting for connections on port 27017
  • 同时删除`链接-mongo` docker-compose 已经为你创建了网络
猜你喜欢
  • 2022-06-20
  • 2019-06-21
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2020-12-23
相关资源
最近更新 更多