Контейнер узла не может подключиться к контейнеру Монго - PullRequest
3 голосов
/ 14 октября 2019

Я пытаюсь докернизировать имеющееся у меня приложение node, использующее экземпляр mongodb. Я пытаюсь указать на 'mongodb://mongo:27018/eugenie_cp', но он продолжает идти к 127.0.0.1:27017

Я следил за этими двумя вопросами, которые могут быть помечены как дубликаты, но я уже использовал ответы оттуда:

Невозможно подключиться к MongoDB через node.js в Docker

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      | }]

Mydocker-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 Ответ

2 голосов
/ 14 октября 2019

В Docker Linking или Docker-Compose Network вы не должны использовать порт публикации, в сервисе для связи сервиса вы должны использовать порт Expose или другой порт контейнера слов, а не порт хоста.

Поэтому обновите строку соединения.

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

РЕДАКТИРОВАТЬ:

Основная проблема была из-за кэширования кода. Мы протестировали с помощью простой .js программы для проверки соединения, которая, наконец, указала на правильное местоположение, и дала нам идею, что код не обновляется. Полагаю, аннулирование кэша - одна из самых больших проблем с компьютером.

Сначала запустил Монго

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

И это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...