使用docker-compose将NodeJS-App连接到MongoDB

时间:2018-05-20 15:31:38

标签: node.js mongodb docker

我有什么

我尝试将我的nodejs应用程序连接到mongoDB-Container。 我在Mediums-Tutorial打开时这样做了,所以我的dockerfiles看起来像这样:

Dockerfile

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

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

搬运工-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-server时,它正常工作。在Docker中编写时,我无法获得连接。我没有任何线索为什么。如果您有任何疑问,请随时提出。

使用docker本身构建docker-image也可以,但没有连接到任何外部mongodb。

我的问题是:

我应该如何在Docker中连接MongoDB-Container和我的应用程序?

1 个答案:

答案 0 :(得分:5)

而不是使用localhost使用为mongo服务mongo提供的服务名称

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

同时检查是否确实需要在主机上公开mongo端口。