Node.js MongoDB与Docker合作;无法在第一次连接时连接到服务器[localhost:27017];

Node.js MongoDB与Docker合作;无法在第一次连接时连接到服务器[localhost:27017];,node.js,mongodb,docker,docker-compose,Node.js,Mongodb,Docker,Docker Compose,我正在使用mongoDB和NodeJS后端。问题是我得到了以下错误 节点:16)未处理的PromisejectionWarning:MongoneWorkError:失败 在第一次连接时连接到服务器[localhost:27017] [MongoNetworkError:connect-EconReflected 127.0.0.1:27017] 这是我的码头工人 version: '3.4' services: db: image: mongo:latest ports:

我正在使用mongoDB和NodeJS后端。问题是我得到了以下错误

节点:16)未处理的PromisejectionWarning:MongoneWorkError:失败 在第一次连接时连接到服务器[localhost:27017] [MongoNetworkError:connect-EconReflected 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
我也尝试过使用
dependens\u on
,但不起作用

在后端,我将mongoose作为与DB通信的中间件。这是我的
index.js

mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))
我也尝试过使用promise,但没有改变。请帮帮我。 提前谢谢

完整的错误日志

在游泳池。 (/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| at Object.onceWrapper(events.js:272:13) rest-api-node_1| at 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| at Object.onceWrapper(events.js:272:13) Socket.emit上的rest-api-node|1(events.js:180:13) rest-api-node|1|在发射错误处 (internal/streams/destroy.js:64:8)rest-api-node|1|at 进程。_tick回调(内部/process/next_tick.js:178:19) rest-api-node|1|名称:'MongoNetworkError',rest-api-node|1|
消息:“无法连接到第一个服务器上的服务器[localhost:27017] connect[MongoNetworkError:connect-EconReflected 127.0.0.1:27017]'}

默认情况下,为您的应用设置单个网络。每个 服务的容器加入默认网络,并且是 可由该网络上的其他容器访问,并可由 它们的主机名与容器名称相同

根据您的
docker compose.yaml
文件,您只能从主机访问
127.0.0.1:27017上的mongo容器。

为了从NodeJS后端容器访问它,您应该使用
db:27017

我也被困在这几个小时了!在连接字符串中设置
db:27017
,在
restapi节点上设置
restart:always
,确保您连接到正确的IP,并确保节点服务器继续尝试连接到您的db。这对我有用

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

注: 对于mongo URI,您必须使用您的MongoDB
服务名称
,而不是
127.0.0.1
localhost

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


服务:
样板api应用程序:
生成:。
环境:
-蒙古里=mongodb://mongodb-myapp:27017/myapp
卷数:
-.:/app
端口:
- "5000:5000"
取决于:
-mongodb myapp
mongodb myapp:
图片:mongo
端口:
- "27017:27017"

你所说的
db:27017
是什么意思?我相信这是mongo的url。我也面临同样的问题。容器内没有
localhost
。您必须将url更改为
mongodb://db:27017/demo
。这解决了我的问题。
错误:撰写文件“/docker Compose.yml”无效,因为:services.mongo.ports无效:无效端口“db:27017”,应该是[[remote\u ip:]remote\u port[-remote\u port]:]port[/protocol]
——上面的建议导致此错误。我还试过我正在使用的数据库的名称。@ChumiestBucket我不明白你为什么对答案投-1票?您不需要在docker-compose.yml上面进行更改。当你改变它时,你得到了错误。我的帖子是关于应用程序设置的,在这里我们定义了mongodb容器的url。它应该是“db:27017”而不是“localhost:27017”。如果docker compose有用户和密码,这将如何工作?