Docker-compose with Loopback 和 Mongodb 无法连接 mongodb

Docker-compose with Loopback and Mongodb fail to connect mongdb

我最近一直在学习 docker,但我无法在我的环回 api 和 mongodb 之间建立连接。该应用程序在本地开发环境中运行良好。使用 docker-compose,我的 mongodb 服务器在 localhost:27017 运行,我的反应前端在 localhost:3000 运行,看起来不错。只有 loopback 无法连接到 mongodb 并抛出以下错误:

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)

这是我的 Dockerfile for 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"]

我的 docker-compose 文件如下所示:

    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

最后 datasource loopback-api 中的文件如下所示:

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

你的数据源文件应该有:

"host": "database" ...

因为在 docker-compose.yml 中你 link mongo 容器作为 database 环回,所以它不是 localhost。请记住,您正在尝试从环回 docker 容器连接到 mongo。另外你应该确保 mongo 在环回之前启动,所以在 docker-compose.yml.

中添加 depends_on: database 到环回服务