使用Docker的MongoDB在“第一次连接时无法连接到服务器[localhost:27017]”

its*_*sMe 6 mongodb node.js docker docker-compose

我将mongoDB与NodeJS后端一起使用。问题是我遇到以下错误

节点:16)UnhandledPromiseRejectionWarning:MongoNetworkError:首次连接时无法连接到服务器[localhost:27017] [MongoNetworkError:连接ECONNREFUSED 127.0.0.1:27017]

这是我的码头工人组成

version: '3.4'

services:
  db:
    image: mongo:latest
    ports:
      - '27017:27017'

  rest-api-node:
    build: .
    ports:
      - '5000:5000'
    links:
      - db
    restart: on-failure
Run Code Online (Sandbox Code Playgroud)

我也尝试过depends_on,没有用。

在后端,我很猫鼬作为与DB通信的中间件。这是我的一部分index.js

mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用诺言,虽然没有变化。请帮帮我。提前致谢

完成错误日志

在游泳池。(/app/node_modules/mongodb-core/lib/topologies/server.js:505:11)rest-api-node_1 | 在Pool.emit(events.js:180:13)rest-api-node_1 | 在连接。(/app/node_modules/mongodb-core/lib/connection/pool.js:329:12)rest-api-node_1 | 在Object.onceWrapper(events.js:272:13)rest-api-node_1 | 在Connection.emit(events.js:180:13)rest-api-node_1 | 在套接字。(/app/node_modules/mongodb-core/lib/connection/connection.js:245:50)rest-api-node_1 | 在Object.onceWrapper(events.js:272:13)rest-api-node_1 | 在Socket.emit(events.js:180:13)rest-api-node_1 | 在emitErrorNT(internal / streams / destroy.js:64:8)rest-api-node_1 | 在process._tickCallback(内部/进程/next_tick.js:178:19)处rest-api-node_1 | 名称:“ MongoNetworkError”,rest-api-node_1 |
消息:“第一次连接[MongoNetworkError:连接ECONNREFUSED 127.0.0.1:27017]时,无法连接到服务器[localhost:27017]”}

ham*_*nia 22

我有同样的问题,其他解决方案对我不起作用,但我这样做了

笔记 :

对于 mongo URI,您必须使用 MongoDBservice name来代替127.0.0.1,或者localhost

例如,在下面的 docker-compose 文件中,我的 mongo 服务名称是mongodb-myapp,我像这样更改 URI mongodb://mongodb-myapp:27017/myapp,它对我有用


services:
  boilerplate-api-app:
    build: .
    environment:
      - MONGO_URI=mongodb://mongodb-myapp:27017/myapp
    volumes:
      - .:/app
    ports:
      - "5000:5000"
    depends_on:
      - mongodb-myapp

 mongodb-myapp:
    image: mongo
    ports:
      - "27017:27017"
Run Code Online (Sandbox Code Playgroud)


Nic*_*lay 5

默认情况下,Compose为您的应用设置单个网络。服务的每个容器都加入默认网络,并且都可以被该网络上的其他容器访问,并且可以在与容器名称相同的主机名下被发现。

根据您的docker-compose.yaml文件,您127.0.0.1:27017只能在主机上访问mongo容器。为了从NodeJS后端容器访问它,您应该使用db:27017

  • @ChumiestBucket 我不明白你为什么对答案投-1票?您不需要更改上面的 docker-compose.yml。当你改变它时,你得到了错误。我的帖子是关于应用程序设置的,我们在其中定义 mongodb 容器的 url。它应该是“db:27017”而不是“localhost:27017”。 (4认同)
  • “db:27017”是什么意思? (2认同)
  • 我相信这是 mongo 网址。我面临着同样的问题。容器内部没有“localhost”。您必须将 url 更改为 `mongodb://db:27017/demo`。这解决了我的问题。 (2认同)