当前位置: 首页 > 知识库问答 >
问题:

无法从我的Nodejs应用程序连接Elasticsearch:连接ECONNREFUSED127.0.0.1:9200

龙德义
2023-03-14

我无法从我的NodeJS应用程序连接到Elasticsearch docker服务器。

这是我的docker-compose文件:

version: "3.7"
services:
  backend:
    container_name: vstay-api
    ports:
      - "4000:4000"
    build:
      context: .
      dockerfile: Dockerfile
    env_file:
      - ./.env
    environment:
      - DB_URI=mongodb://mongo:27017/vstay-db
      - DB_HOST=mongo
      - DB_PORT=27017
    restart: always
    links:
      - mongo
      - elasticsearch
  mongo:
    image: mongo:4.2
    ports:
      - "9000:27017"
    container_name: vstay-db
    restart: always
    volumes:
      - "./data/mongo:/data/db"
    environment:
      - DB_HOST=mongo
      - DB_PORT=27017
    command: mongod
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
    container_name: vstay_elasticsearch
    environment:
      - node.name=elasticsearch
      - cluster.name=datasearch
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - cluster.initial_master_nodes=elasticsearch
    ports:
      - 9200:9200
      - 9300:9300
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data/elastic:/usr/share/elasticsearch/data
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.3
    container_name: vstay_kibana
    logging:
      driver: none

有弹力的js

const { Client } = require("@elastic/elasticsearch");

module.exports.connectES = () => {
  try {
    const client = new Client({
      node: "http://localhost:9200",
      maxRetries: 5,
      requestTimeout: 60000,
      sniffOnStart: true,
    });

    client.ping(
      {
        // ping usually has a 3000ms timeout
        requestTimeout: Infinity,
        // undocumented params are appended to the query string
        hello: "elasticsearch!",
      },
      function (error) {
        if (error) {
          console.log(error);
          console.trace("elasticsearch cluster is down!");
        } else {
          console.log("All is well");
        }
      }
    );

    return client;
  } catch (error) {
    console.log(error);
    process.exit(0);
  }
};

index.js连接:

const { app } = require("./config/express");

const { connect: dbConnect } = require("./config/mongo");

const { connectES } = require("./config/elastic");

const { port, domain, env } = require("./config/vars");

let appInstance;
const startApp = async () => {
  const dbConnection = await dbConnect();
  const ESConnection = await connectES();

  app.locals.db = dbConnection;
  app.locals.ESClient = ESConnection;

  app.listen(port, () =>
    console.log(`Server is listening on ${domain.API} (${env})`)
  );

  return app;
};

appInstance = startApp();

module.exports = { appInstance };

我有一个dockerize的应用程序(NodeJS和Elasticsearch-v7.9.3)。服务器可以很好地启动,但当我尝试在Elasticsearch中创建客户端实例时,它向我显示了一个错误:

ConnectionError: connect ECONNREFUSED 127.0.0.1:9200
                            at ClientRequest.<anonymous> (/app/node_modules/@elastic/elasticsearch/lib/Connection.js:109:18)
                            at ClientRequest.emit (events.js:210:5)
                            at Socket.socketErrorListener (_http_client.js:406:9)
                            at Socket.emit (events.js:210:5)
                            at emitErrorNT (internal/streams/destroy.js:92:8)
                            at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
                            at processTicksAndRejections (internal/process/task_queues.js:80:21) {
                            name: 'ConnectionError',
                            meta: {
                            body: null,
                            statusCode: null,
                            headers: null,
                            meta: {
                              context: null,
                              request: [Object],
                              name: 'elasticsearch-js',
                              connection: [Object],
                              attempts: 5,
                              aborted: false
                            }
                          }
                         }

Elasticsearch和Kibana的服务器已启动,我可以在浏览器上连接它:http://localhost:9200和http://localhost:5601。

但当我从我的nodeJS应用程序连接时,它仍然显示错误。我还试图找到我的容器IP,并将其替换为“localhost”,但它仍然不起作用。

有人能帮我解决这个问题吗?谢谢

  • 节点版本:v10.19.0
  • @弹性/elasticsearch版本:7.9.3
  • os:Linux
  • 环境:Docker

共有1个答案

蔚和风
2023-03-14

运行docker compose文件时,elasticsearch服务实例将无法用于localhost的后端服务。更改<代码>http://localhost:9200至http://elasticsearch:9200在您的节点中。js代码。

docker compose自动创建与每个服务的服务名称同名的dns条目。

 类似资料:
  • 我生成了一个。我的SpringMVC Maven Hibernate MySQL应用程序的war文件,该应用程序在本地主机和本地MySQL数据库上运行良好。我配置数据库的方式是通过WebAppConfig。查看应用程序的java文件。属性文件并检索适当的信息。 然后我创建了一个OpenShift帐户并部署了它。war文件。我添加了MySQL和PHPMyAdmin盒带,以便维护数据库。当我试图通过我

  • 我是Django的新手。我已经创建了一个名为,它在浏览器和邮递员应用程序中都能完美运行。 然而,当我试图从Android应用程序访问API时,它返回NULL。 当API如下所示时,android代码可以工作。 但是,当API为以下API时,它不起作用,即使以下API在同一台PC上运行的浏览器和Postman应用程序中运行良好。 我将代码附加到进行API调用的地方。 有人能帮我吗?提前感谢。

  • 示例代码: 客户端日志: 13/02/06 10:58:32信息zookeeper.clientcnxn:服务器192.168.113.27/192.168.113.27:2181上完成会话建立,sessionid=0x13CAE4BD91B0003,协商超时=40000

  • 尝试使用主连接字符串和用户名(数据库名)连接到cosmosdb Mongo API 原因:com.mongodb.mongotieoutexception:在等待与com.mongodb.client.internal.mongoclientdelegate$1@3C291AAD匹配的服务器时,在30000 ms后超时。群集状态的客户端视图是{type=replica_set,servers=[{

  • 我是新来的docker和有一个简单的DW(dropwizard)应用程序连接到elasticsearch,其中已经运行在docker使用docker-compose.yml,其中有以下内容。 弹性搜索的Docker-compose.yml 注意:我将8200和8300公开为主机(本地mac系统)上的ES端口 现在,当我在本地主机上运行连接到8200中ES的DW应用程序时,一切都正常了,但现在我正在

  • 我有一个 Spring 引导项目,其中我使用 spring-boot-starter-actuator 和 io.dropwizard.metrics。 它生成我可以使用 url http://myapplication/metrics 访问的指标。我将应用程序部署在 Wildfly 10 独立服务器上。 我想使用jmx读取jconsole上的指标。我将应用程序配置为使用JMXReporter发送