2017-06-22 54 views
1

蒙戈这是我的搬运工,撰写文件:连接的NodeJS并与码头工人

version: "2" 
services: 
    rest-api: 
    build: . 
    ports: 
     - "3007:3007" 
    links: 
     - mongo 
    mongo: 
    image: mongo 
    volumes: 
     - /data/mongodb/db:/data/db 
    ports: 
     - "27017:27017" 

这是我Dockerfile:

FROM mhart/alpine-node:latest 

RUN rm -rf /tmp/node_modules 
ADD package.json /tmp/package.json 
RUN cd /tmp && npm install 
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/ 

WORKDIR /opt/app 
ADD . /opt/app 

EXPOSE 3007 

CMD ["node", "index.js"] 

当我运行的图像,节点不能够连接到mongo:

MongoError: failed to connect to server [localhost:27017] on first connect 

什么可能是错误的?我怎样才能调试呢?

更新:

在我节点应用程序我有:

let connection = mongoose.connect('mongodb://localhost/myapp'); 

回答

3

节点试图连接到蒙戈上localhost,因为它不是在为节点相同的容器中运行的失败。相反,它运行在不同的容器中,即在不同的主机上。

你可能有这样一行在您的应用程序:

var url = 'mongodb://localhost:27017/myproject'; 

它定义了MongoDB中所处的位置。您需要将localhost更改为实际主机,在您的情况下这将是mongo

2

在您的节点应用程序中,您需要引用容器而不是本地主机。

在你的连接字符串蒙戈使用名称mongo因为你可能只是使用默认的微少

https://docs.mongodb.com/manual/reference/connection-string/

例如主机

mongodb://mongo:27017/ 

你需要这样做,因为蒙戈数据库是在一个单独的容器(有不同的IP地址),它们通过TCP连接,从而本地主机涉及容器节点是英寸