Dockerized elasticsearch и fscrawler: не удалось создать клиента elasticsearch, искатель отключен… В соединении отказано

Я получил следующую ошибку при попытке подключить Dockerized fscrawler к Dockerized elasticsearch:

[fpecfcElasticsearchClientManager] не удалось создать клиента elasticsearch, отключив сканер…
[fpecfFsCrawler] При запуске сканера получена критическая ошибка: [В соединении отказано]

1 ответ

Когда fscrawler запускается в первый раз (т. Е. docker-compose run fscrawler) это создает /config/{fscrawer_job}/_settings.yml со следующей настройкой по умолчанию:

elasticsearch:
  nodes:
  - url: "http://127.0.0.1:9200"

Это заставит fscrawler попытаться подключиться к localhost (например, 127.0.0.1). Однако это не удастся, если fscrawler находится в контейнере докеров, потому что он пытается подключиться к локальному хосту КОНТЕЙНЕРА. Это было особенно запутанным в моем случае, потому что elasticsearch БЫЛ доступен как localhost, но на локальном хосте моего физического компьютера (а НЕ localhost контейнера). Изменение URL-адреса позволило fscrawler подключиться к сетевому адресу, на котором фактически находится elasticsearch.

elasticsearch:
  nodes:
  - url: "http://elasticsearch:9200"

Я использовал следующий образ докера: https://hub.docker.com/r/toto1310/fscrawler

# FILE: docker-compose.yml

version: '2.2'
services:
  # FSCrawler 
  fscrawler:
    image: toto1310/fscrawler
    container_name: fscrawler
    volumes:
      - ${PWD}/config:/root/.fscrawler
      - ${PWD}/data:/tmp/es
    networks: 
      - esnet
    command: fscrawler job_name

  # Elasticsearch Cluster
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - discovery.seed_hosts=elasticsearch2
      - cluster.initial_master_nodes=elasticsearch,elasticsearch2
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
    container_name: elasticsearch2
    environment:
      - node.name=elasticsearch2
      - discovery.seed_hosts=elasticsearch
      - cluster.initial_master_nodes=elasticsearch,elasticsearch2
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

Ран docker-compose up elasticsearch elasticsearch2для вызова узлов elasticsearch.
Ранdocker-compose run fscrawler создать _settings.yml
Отредактировано _settings.yml к

elasticsearch:
  nodes:
  - url: "http://elasticsearch:9200"

Запущен fscrawler docker-compose up fscrawler

Другие вопросы по тегам