Node.js MongoDB与Docker合作;无法在第一次连接时连接到服务器[localhost:27017];
我正在使用mongoDB和NodeJS后端。问题是我得到了以下错误 节点:16)未处理的PromisejectionWarning:MongoneWorkError:失败 在第一次连接时连接到服务器[localhost:27017] [MongoNetworkError:connect-EconReflected 127.0.0.1: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:
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
,我像这样更改URImongodb://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有用户和密码,这将如何工作?