2017-06-22 53 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連接,從而本地主機涉及容器節點是英寸