首页 > 解决方案 > ElasticSearch 无法恢复连接:http://elasticsearch:9200/

问题描述

我尝试使用 docker-compose 在 Centos 8 上运行 ELK:

我在这里docker-compose.yml

version: '3.1'

services:

  elasticsearch:
   image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
   container_name: elasticsearch
   hostname: elasticsearch
   ports:
    - "9200:9200"
   expose:
    - "9200"
   volumes:
    - elasticsearch-data:/usr/share/elasticsearch/data
   networks:
    - docker-network

  kibana:
   image: docker.elastic.co/kibana/kibana:6.2.4
   container_name: kibana
   ports:
    - "5601:5601"
   expose:
    - "5601"
   environment:
    - SERVER_NAME=kibana.localhost
    - ELASTICSEARCH_URL=http://elasticsearch:9200
    - ELASTICSEARCH_USERNAME=elastic
    - ELASTICSEARCH_HOST=elasticsearch
    - ELASTICSEARCH_PORT=9200
    - ELASTIC_PWD=changeme
    - KIBANA_PWD=changeme
   depends_on:
    - elasticsearch
   networks:
    - docker-network

networks:
  docker-network:
    driver: bridge

volumes:
  elasticsearch-data:

但我面临这个错误:

{"type":"log","@timestamp":"2020-03-03T22:53:19Z","tags":["warning","elasticsearch","admin"],"pid":1, “消息”:“无法恢复连接:http://elasticsearch:9200/ ”}

当我检查时:

  1. 弹性搜索运行良好。

  2. docker exec kibana ping elasticsearch工作正常。

  3. 正如您在 docker-compose.yml 中看到的那样,kibana 和 elasticsearch 都在同一个网络上

  4. 我检查了docker exec kibana curl http://elasticsearch:9200,结果是:

连接弹性搜索失败:9200;没有到主机的路由

我还检查了其他类似的问题及其解决方案,但都没有奏效。

标签: dockerelasticsearchdocker-composekibanaelastic-stack

解决方案


如果你在 Docker 中运行 ElasticSearch,那么你可能需要检查你是否为 Docker 分配了足够的内存限制。这可能会导致 ElasticSearch 变慢甚至崩溃。

默认情况下,Docker Desktop 设置为每个 Docker 允许 2Gb 的 RAM,但在我自己的项目中,我发现 4Gb 可以防止崩溃,但 5Gb 产生了额外的性能加速。您的里程可能会因您摄取的数据量而异。

可以通过以下方式设置 Docker 桌面内存设置:

  • Docker 桌面 -> 首选项 -> 资源 -> 内存

检查 Docker 容器内的内存使用情况

DOCKER_ID=`docker ps | tail -n1 | awk '{ print $1 }'`; docker exec -it $DOCKER_ID /bin/bash

free -h  # repeatedly run to inspect changes over time

请注意,ElasticSearch 内存使用量在摄取和索引期间达到峰值,然后在索引和合并完成后最终稳定到稍低的数字。因此,理想情况下,应该在摄取期间测试峰值内存使用情况。


推荐阅读