Подключите NodeJS-App к MongoDB с помощью docker-compose - PullRequest
0 голосов
/ 20 мая 2018

Что у меня есть

Я пытаюсь подключить мое приложение nodejs к mongoDB-контейнеру.Я сделал это с открытым Mediums-Tutorial , поэтому мои файлы Docker выглядят так:

Dockerfile

FROM node:carbon
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install 
COPY . . 

EXPOSE 8085
CMD ["npm","start"]

docker-compose.yml

version: "2"
services: 
  metis:
    build: .
    ports:
      - "8085:8085"
    links:
      - mongo

  mongo:
      image: mongo
      volumes:
        - /data/mongodb/db:/data/db
      ports:
        - "27017:27017"

Но когда я пытаюсь подключиться к базе данных, я получаю

name    "MongoNetworkError"
message "failed to connect to server [localhost:27017] on first connect         [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]"

С моим приложением , похожим на это:

let mongodb = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017'
const dbName = 'metis'

mongodb.connect(url, (err, client) => {
        if (err) reject(err)
        else {
            const db = client.db(dbName)

            db.collection(type + ":" + entity).insertOne(document, (error, result) => {
                if (error) reject(error)
                else { resolve(result) }
            })

            client.close()
        }
    })
})

Работает нормально, когда я просто запускаю приложение узла и mongodb-сервер самостоятельно.но когда сочиняю в Docker, я просто не могу получить соединениеЯ понятия не имею, почему.Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать.

Построение образа докера с помощью самого докера также работает, но без связи с каким-либо внешним mongodb.

Мой вопрос:

Как мне подключить MongoDB-Container и мое приложение в Docker?

1 Ответ

0 голосов
/ 20 мая 2018

Вместо использования localhost используйте имя службы, данное службе mongo mongo

const url = 'mongodb://mongo:27017'

Также проверьте, действительно ли вам нужно выставить порт mongo на хосте.

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