我正在使用mongoDB和NodeJS后端。问题是我得到以下错误
node:16)UnhandledPromiseRejectionWarning:MongoNetworkError:无法在第一次连接时连接到服务器[localhost:27017][MongoNetworkError:connect ECONNREFUSED 127.0.0.1:27017]
这是我的docker-compose
version: '3.4'
services:
db:
image: mongo:latest
ports:
- '27017:27017'
rest-api-node:
build: .
ports:
- '5000:5000'
links:
- db
restart: on-failure
我也试过depends_on
,没有用。
在后端,我是mongoose作为与数据库通信的中间件。这是我的index.js
部分
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))
我也试过使用promise,但没有改变。请帮帮我。先谢谢你了
完整错误日志
at Pool.(/app/node_modules/mongodb-core/lib/topologies/server.js:505:11)rest-api-node_1|at 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|at Socket.(/app/node_modules/mongodb-core/lib/connection/connection.js:245:50)rest-api-node_1|at Object.onceWrapper(events.js:272:13)rest-api-node_1|at Socket.emit(events.js:180:13)rest-api-node_1|at emitErrorNT(internal/streams/destroy.js:64:8)rest-api-node_1|at process._tickCallback(internal/process/next_tick.js:178:19)rest-api-node_1|name:'MongoNetworkError',rest-api-node_1|
消息:'第一次连接时无法连接到服务器[localhost:27017][MongoNetworkError:连接ECONNREFUSED 127.0.0.1:27017]' }
5条答案
按热度按时间qgzx9mmu1#
默认情况下,Compose为您的应用设置单个网络。服务的每个容器都加入默认网络,并且可以由该网络上的其他容器访问,并且可以在与容器名称相同的主机名下被它们发现。
根据您的
docker-compose.yaml
文件,您只能从主机访问127.0.0.1:27017
上的mongo容器。为了从NodeJS后端容器访问它,你应该使用db:27017
。ikfrs5lh2#
我有同样的问题,其他的解决方案对我不起作用,但我这样做了
注意:
对于mongo URI,必须使用MongoDB
service name
,而不是127.0.0.1
或localhost
例如,在下面的docker-compose文件中,我的mongo服务名称是
mongodb-myapp
,我将URI更改为mongodb://mongodb-myapp:27017/myapp
,它对我有效3htmauhk3#
我也被困在这几个小时!在连接字符串中设置
db:27017
,在rest-api-node
上设置restart: always
,可确保连接到正确的IP,并确保节点服务器继续尝试连接到数据库。这对我很有效!mmvthczy4#
docker-compose.yaml
上面的代码是docker-compose.yaml文件,MongoDB的服务名称是'mongo'。您不必手动插入容器的IP地址。相反,只需在MongoDB URI中插入服务名称,如下面给出的示例代码:
mbzjlibv5#
我遇到这个问题是因为MongoDB已经在端口27017上运行(本地,而不是在docker上),并且具有不同的凭据,这优先于在docker上运行的数据库。
在这种情况下,解决方案是杀死本地MongoDB或更改端口: