Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 无法从主机访问replicaset mongodb(docker)_Node.js_Mongodb_Docker - Fatal编程技术网

Node.js 无法从主机访问replicaset mongodb(docker)

Node.js 无法从主机访问replicaset mongodb(docker),node.js,mongodb,docker,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"

我的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节点驱动程序并使用以下配置

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]' }
{MongoNetworkError:在第一次连接时未能连接到服务器[MongoNetworkError:getaddrinfo ENOTFOUND mongodb_primary:27017]
在池中。(/Users/hiteshbaldaniya/Applications/contentstack migration/node_modules/mongodb core/lib/topologies/server.js:505:11)
在Pool.emit(events.js:198:13)
连接时。(/Users/hiteshbaldaniya/Applications/contentstack migration/node_modules/mongodb core/lib/Connection/pool.js:329:12)
在Object.onceWrapper(events.js:286:20)
在Connection.emit(events.js:198:13)
在套接字上。(/Users/hiteshbaldaniya/Applications/contentstack migration/node_modules/mongodb core/lib/connection/connection.js:245:50)
在Object.onceWrapper(events.js:286:20)
在Socket.emit(events.js:198:13)
在发射时出错(内部/streams/destroy.js:91:8)
在emitErrorAndCloseNT(内部/streams/destroy.js:59:3)
名称:“MongoNetworkError”,
信息:
'在第一次连接[MongoNetworkError:getaddrinfo ENOTFOUND mongodb_primary mongodb_primary:27017]时未能连接到服务器[mongodb_primary:27017]。'

谢谢,

我找到了解决办法。通过在my/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

如果有人知道,一定要告诉我。谢谢