2017-11-15 1 views
0

Ich habe docker in letzter Zeit gelernt, und ich konnte keine Verbindung zwischen meinem Loopback API und Mongodb herstellen. Die Anwendung funktioniert in der lokalen Entwicklungsumgebung einwandfrei. Mit docker-compose läuft mein mongodb-Server unter localhost:27017 und mein reac-Frontend dient bei localhost:3000 und sieht gut aus. Nur Loopback ist keine Verbindung die folgenden Fehler MongoDB und wirft:Docker-komponieren mit Loopback und Mongodb fehlgeschlagen mongdb

loopback_1 | Web server listening at: http://localhost:8080 
loopback_1 | Browse your REST API at http://localhost:8080/explorer 
loopback_1 | Connection fails: MongoError: failed to connect to server 
[localhost:27017] on first connect [MongoError: connect ECONNREFUSED 
127.0.0.1:27017] 
loopback_1 | It will be retried for the next request. 
loopback_1 | 
loopback_1 | /opt/src/app/node_modules/mongodb/lib/mongo_client.js:421 
loopback_1 |   throw err 
loopback_1 |   ^
loopback_1 | MongoError: failed to connect to server [localhost:27017] 
on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017] 
loopback_1 |  at Pool.<anonymous> 
(/opt/src/app/node_modules/mongodb-core/lib/topologies/server.js:336:35) 

Hier ist meine Dockerfile für Loopback-API

FROM node:6 

RUN mkdir -p /opt/src/app 

WORKDIR /opt/src/app 

COPY package.json /opt/src/app 

RUN npm cache clean 

RUN npm install 

COPY . /opt/src/app 

EXPOSE 8080 

CMD ["npm", "start"] 

Mein Docker-komponieren Datei sieht wie folgt aus :

version: '3.0' # specify docker-compose version 

# Define the services/containers to be run 
services: 
    database: # name of first service 
     image: mongo # specify the image to build container from 
     ports: 
     - "27017:27017" # specify port forwarding 

    loopback: # name of second service 
     build: myapp_backend # specify the directory of the Dockerfile 
     ports: 
     - "8080:8080" # specify port mapping 
     links: 
     - database # link this service to the database service 

    react: # name of third service 
     build: myapp_frontend # specify the directory of the Dockerfile 
     ports: 
     - "3000:3000" #specify port mapping 

Und schließlich Datenquelle Datei in Loopback-api sieht wie folgt aus:

{ 
    "db": { 
    "host": "localhost", 
    "port": 27017, 
    "url": "", 
    "database": "test", 
    "password": "", 
    "name": "mongoDS", 
    "user": "", 
    "connector": "mongodb" 
    } 
} 

Antwort

2

Ihre Datenquelldatei haben sollte:

"host": "database" ...

da in Docker-compose.yml Sie Mongo Container als database Loopback verknüpfen, also ist es nicht localhost. Denken Sie daran, dass Sie versuchen, vom Loopback-Docker-Container aus eine Verbindung zu Mongo herzustellen. Außerdem sollten Sie sicherstellen, dass Mongo vor dem Loopback gestartet wird, also fügen Sie depends_on: database zum Loopback-Dienst in docker-compose.yml hinzu.

Verwandte Themen