Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoServerSelectionError:getaddrinfo ENOTFOUND_Node.js_Mongodb_Docker - Fatal编程技术网

Node.js MongoServerSelectionError:getaddrinfo ENOTFOUND

Node.js MongoServerSelectionError:getaddrinfo ENOTFOUND,node.js,mongodb,docker,Node.js,Mongodb,Docker,我在使用docker和NodeJS驱动程序连接mongodb时遇到一些问题 这是我的docker-compose.yml文件: 版本:“3.3” 服务: mongodb: 图片:mongo:4.0.20 端口: - 27017:27017 命令:mongod--replSet rs0 部署: 副本:1份 重新启动\u策略: 条件:“失败时” 我用 docker stack deploy-c./docker-compose.yml——带有注册表auth XXX 然后,当我确定mongo的起步很好

我在使用docker和NodeJS驱动程序连接mongodb时遇到一些问题

这是我的docker-compose.yml文件:

版本:“3.3”
服务:
mongodb:
图片:mongo:4.0.20
端口:
- 27017:27017
命令:mongod--replSet rs0
部署:
副本:1份
重新启动\u策略:
条件:“失败时”
我用
docker stack deploy-c./docker-compose.yml——带有注册表auth XXX

然后,当我确定mongo的起步很好时,我会运行:

docker exec$(docker ps-q-f name=mongodb)mongo local--eval“rs.initiate()”
初始化复制集

这是我的nodejs测试文件:

const MongoClient=require('mongodb');
(异步()=>{
让db;
试一试{
db=(等待MongoClient)(
'mongodb://localhost:27017/qos',
{
useNewUrlParser:true,
useUnifiedTopology:正确
}
)).db();
console.log('connected');
}捕获(错误){
控制台跟踪(错误)
}
})()
但是当我运行test.js文件时,我看到:

跟踪:MongoServerSelectionError:getaddrinfo ENOTFOUND 272b05abb632
超时。_onTimeout(node_modules/mongodb/lib/core/sdam/topology.js:438:30)
在listOnTimeout(internal/timers.js:554:17)
在processTimers(internal/timers.js:497:7){
原因:拓扑学描述{
类型:“ReplicateSetNoPrimary”,
setName:'rs0',
maxSetVersion:1,
maxElectionId:7FFFFF0000000000000001,
服务器:映射{'bcc9e46ea248:27017'=>[ServerDescription]},
陈腐:错,
是的,
兼容性错误:null,
logicalSessionTimeoutMinutes:空,
心跳频率:10000,
localThresholdMS:15,
一般版本:7
}
}
在test.js:15:13
我检查
272b05abb632
是否为良好的容器id, 在我的docker流程中,我看到:

2020-11-10T16:34:49.019360315Z XXX_mongodb.1。awsb46tji1lg@docker-桌面| 2020-11-10T16:34:49.018+0000 I网络[侦听器]连接已从10.0.0.2:49082#4接受(2个连接现已打开)
2020-11-10T16:34:49.027564962Z XXX_mongodb.1。awsb46tji1lg@docker-桌面| 2020-11-10T16:34:49.027+0000 I网络[conn4]接收到来自10.0.0.2:49082的客户端元数据conn4:{驱动程序:{名称:“nodejs”,版本:“3.6.3”},操作系统:{type:“Darwin”,名称:“Darwin”,架构:“x64”,版本:“19.6.0”},平台:“'Node.js v12.19.0,LE(统一)” }
2020-11-10T16:34:49.033185739Z XXX_mongodb.1。awsb46tji1lg@docker-桌面| 2020-11-10T16:34:49.032+0000 I网络[conn4]端连接10.0.0.2:49082(1个连接现在打开)
我不明白为什么使用统一拓扑,它不起作用:(

我请求你的帮助

我还尝试通过docker compose将mongod.conf添加到我的容器中,但它也不起作用:

版本:“3.3”
服务:
mongodb:
图片:mongo:4.0.20
端口:
- 27017:27017
命令:mongod--config/etc/mongod.conf
卷数:
-“/mongod.conf:/etc/mongod.conf”
部署:
副本:1份
重新启动\u策略:
条件:“失败时”

您的MunGDB服务器不是在本地主机上运行,而是在容器的IP上运行。请考虑为节点代码创建一个容器,并且对于连接字符串使用Mango容器的名称而不是本地主机。
security:
  authorization: 'enabled'

net:
  port: 27017
  bindIp: 0.0.0.0   #default value is 127.0.0.1

replication:
  replSetName: rs0