node.js - 无法从主机访问副本集 mongodb(docker)
问题描述
我的 nodejs 代码在我的主机(MACOS)上运行,它试图连接到在 docker 中运行的 mongodb 副本集。
version: "3"
services:
redis_master:
image: redis:2.8
volumes:
- "/Users/hiteshbaldaniya/docker-redis/master:/data/"
ports:
- "6379:6379"
networks:
- database
mongodb_primary:
build:
context: ./
dockerfile: DockerfileDB
command: mongod --replSet "hdbrs" --dbpath "/data/27017/" --port 27017
ports:
- "27017:27017"
volumes:
- "/Users/hiteshbaldaniya/docker-mongodb/:/data/"
networks:
- database
mongodb_secondary1:
build:
context: ./
dockerfile: DockerfileDB
command: mongod --replSet "hdbrs" --dbpath "/data/27018/" --port 27018
ports:
- "27018:27018"
volumes:
- "/Users/hiteshbaldaniya/docker-mongodb/:/data/"
networks:
- database
mongodb_secondary2:
build:
context: ./
dockerfile: DockerfileDB
command: mongod --replSet "hdbrs" --dbpath "/data/27019/" --port 27019
ports:
- "27019:27019"
volumes:
- "/Users/hiteshbaldaniya/docker-mongodb/:/data/"
networks:
- database
hdb_nginx:
build:
context: ./nginx/
dockerfile: DockerfileNginx.dev
ports:
- "8081:80"
volumes:
- "/Users/hiteshbaldaniya/logs/docker-nginx/:/var/log/nginx/"
networks:
- backend
networks:
backend:
driver: bridge
database:
driver: bridge
我的主机上的所有 3 个端口都是打开的,我尝试使用 telnet,我也能够连接到所有端口。
我的 nodejs 应用程序使用 mongodb-node-driver 并使用以下配置。
module.exports = {
servers: [{
host: 'localhost',
port: 27017,
},
{
host: 'localhost',
port: 27018,
},
{
host: 'localhost',
port: 27019,
},
],
database: 'mydatabase',
options: {
"raw": false,
"poolSize": 5,
"readPreference": "primaryPreferred",
"w": 1,
"wtimeout": 12000,
"replicaSet": "hdbrs"
}
};
连接到 mongodb 时,我的应用程序抛出以下错误,有人可以帮我吗?
{ MongoNetworkError: failed to connect to server [mongodb_primary:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND mongodb_primary mongodb_primary:27017]
at Pool.<anonymous> (/Users/hiteshbaldaniya/Applications/contentstack-migration/node_modules/mongodb-core/lib/topologies/server.js:505:11)
at Pool.emit (events.js:198:13)
at Connection.<anonymous> (/Users/hiteshbaldaniya/Applications/contentstack-migration/node_modules/mongodb-core/lib/connection/pool.js:329:12)
at Object.onceWrapper (events.js:286:20)
at Connection.emit (events.js:198:13)
at Socket.<anonymous> (/Users/hiteshbaldaniya/Applications/contentstack-migration/node_modules/mongodb-core/lib/connection/connection.js:245:50)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
name: 'MongoNetworkError',
message:
'failed to connect to server [mongodb_primary:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND mongodb_primary mongodb_primary:27017]' }
谢谢,
解决方案
我能够找出解决方案。通过在我的 /etc/hosts 文件中添加主机条目。
127.0.0.1 mongodb_primary
127.0.0.1 mongodb_secondary1
127.0.0.1 mongodb_secondary2
从主机连接到在 docker 内运行的 mongodb 时,我仍然不确定 localhost 有什么问题,我仍然需要了解它的行为。
仅对于节点,我还尝试在 mongodb 运行命令期间在命令行中添加 --bind_ip_all 。
如果有人知道,请告诉我。谢谢
推荐阅读
- docker - 使用 docker 驱动程序在 minikube 中 Docker 本地私有注册表
- python - 为什么我的注册和登录系统在 python 中循环?
- java - 通过 WildFly 中的负载均衡器向 HornetQ 发送消息
- javascript - 如何在 JavaScript 中反转嵌套对象
- json - Flutter 错误:参数类型“动态”不能分配给参数类型“Iterable”
' - gnuplot - splitting a number into the integer and decimal parts GNUPLOT
- c# - Backus-Naur 形式的正则表达式
- javascript - PugJS 没有从 json 插入数字
- kotlin - 枚举的函数 vararg 参数
在科特林 - c++ - 函数重载时使用 std::invoke