2017-06-22 3 views
1

Das ist mein Docker-Compose-Datei:Anschluss NodeJS und Mongo mit Docker

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

Das ist mein 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"] 

Wenn ich das Bild laufen, der Knoten ist nicht in der Lage zu verbinden mongo:

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

Was kann falsch sein? Wie kann ich das debuggen?

Update:

In meinem Knoten app ich habe:

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

Antwort

3

Knoten versucht, Mongo auf localhost zu verbinden, die fehlschlägt, weil es nicht in demselben Behälter wie Knoten ausgeführt wird. Stattdessen läuft es in einem anderen Container, d. H. Auf einem anderen Host.

Sie haben wahrscheinlich eine Zeile wie diese in Ihrer Anwendung:

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

Es legt fest, wo der MongoDB befindet. Sie müssen localhost zu dem tatsächlichen Host ändern, was in Ihrem Fall mongo wäre.

2

In Ihrer Knoten-App müssen Sie anstelle von localhost auf Ihren Container verweisen.

In der Verbindungszeichenfolge Mongo den Namen mongo als Host verwendet, werden Sie wahrscheinlich nur den Standard in der Minute mit

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

z.B.

mongodb://mongo:27017/ 

Sie müssen dies tun, weil die Mongo Datenbank in einem separaten Behälter (mit einer anderen IP-Adresse) ist sie über TCP verbunden sind, so localhost der Knoten Behälter betrifft ist.