MongoDB с Docker "не удалось подключиться к серверу [localhost: 27017] при первом подключении" - PullRequest
0 голосов
/ 24 июня 2018

Я использую mongoDB с бэкэндом NodeJS. Проблема в том, что я получаю следующую ошибку

узел: 16) UnhandledPromiseRejectionWarning: MongoNetworkError: сбой подключиться к серверу [localhost: 27017] при первом подключении [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]

Это мой докер-композитор

version: '3.4'

services:
  db:
    image: mongo:latest
    ports:
      - '27017:27017'

  rest-api-node:
    build: .
    ports:
      - '5000:5000'
    links:
      - db
    restart: on-failure

Я тоже пробовал с depends_on, не работал.

На бэкенде я - мангуст как связующее ПО для связи с БД. это часть моего index.js

mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))

Я тоже пытался использовать обещание, но без изменений. Пожалуйста, помогите мне. Заранее спасибо

полный журнал ошибок

у бассейна. (/App/node_modules/mongodb-core/lib/topologies/server.js:505:11) rest-api-node_1 | в Pool.emit (events.js: 180: 13) rest-api-node_1 | при подключении. (/App/node_modules/mongodb-core/lib/connection/pool.js:329:12) rest-api-node_1 | в Object.onceWrapper (events.js: 272: 13) rest-api-node_1 | в Connection.emit (events.js: 180: 13) rest-api-node_1 | на сокете. (/App/node_modules/mongodb-core/lib/connection/connection.js:245:50) rest-api-node_1 | в Object.onceWrapper (events.js: 272: 13) rest-api-node_1 | на Socket.emit (events.js: 180: 13) rest-api-node_1 | на emitErrorNT (internal / streams / destroy.js: 64: 8) rest-api-node_1 | в process._tickCallback (internal / process / next_tick.js: 178: 19) rest-api-node_1 | имя: 'MongoNetworkError', rest-api-node_1 |
сообщение: «не удалось подключиться к серверу [localhost: 27017] в первую очередь connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] '}

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Изменить это

mongoose.connect('mongodb://localhost:27017/dbName', { useNewUrlParser: true });

К этому

mongoose.connect('mongodb://db:27017/dbName', { useNewUrlParser: true }); // docker-compose service name

Измените localhost или 127.0.0.1 в вашем mongoose.connect на ваше имя службы docker-compose.

0 голосов
/ 25 июня 2018

По умолчанию Compose устанавливает единую сеть для вашего приложения.Каждый контейнер для службы присоединяется к сети по умолчанию и доступен для других контейнеров в этой сети и может быть обнаружен ими с именем хоста, идентичным имени контейнера.

Согласно вашему файлу docker-compose.yamlможет получить доступ к вашему контейнеру Монго на 127.0.0.1:27017 только с хост-компьютера.Для доступа к нему из внутреннего контейнера NodeJS вы должны использовать db:27017.

...