В вашем кластере не найдено активных узлов, Laravel, докер

Я экспериментирую с ElasticSearch, используя laravel. Вот моя конфигурация на данный момент: -

конфиг/эластик.php

return array(

 'config' => [
    'hosts'     => ['localhost:9200'],
    'retries'   => 1,
 ],

 'default_index' => 'contents',
);

приложение/Content.php

class Content extends Model
{
 use ElasticquentTrait;

 protected $fillable = ['title', 'text', 'image'];

 protected $mappingProperties = array(
    'title' => [
        'type' => 'string',
        "analyzer" => "standard",
    ],
    'text' => [
        'type' => 'text',
        "analyzer" => "standard",
    ],
    'image' => [
        'type' => 'string',
        "analyzer" => "standard",
    ],
 );
}

маршруты/web.php

Route::get('/', function () {
 App\Content::createIndex($shards = null, $replicas = null);
 App\Content::putMapping($ignoreConflicts = true);
 App\Content::addAllToIndex();

 return view('contents.index', [
    'contents' => App\Content::all(),
 ]);
});

Route::get('/search', function() {
 return App\Content::searchByQuery(['match' => ['title' => 'Adipisci']]);
});

композитор.json

"require": {
 "elasticquent/elasticquent": "dev-master",
}

// database/migrations/2020_12_12_105155_create_contents_table.php
public function up()
{
 Schema::create('contents', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('title');
    $table->text('text');
    $table->string('image');
    $table->timestamps();
 });
}

Мое приложение работает в док-контейнере по адресу: http://localhost:3024 Мой эластичный поиск также работает в док-контейнере по адресу:

docker run --rm -d -e "discovery.type=single-node" -e "bootstrap.memory_lock=true" -p 9200:9200 elasticsearch:6.8.1

и я могу получить к нему доступ с помощью cURL (и в браузере): -

curl -X GET 'http://localhost:9200'
{
 "name" : "irt6ohl",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "jtqcAMyJTRunrxobr6zE_g",
 "version" : {
  "number" : "6.8.1",
  "build_flavor" : "default",
  "build_type" : "docker",
  "build_hash" : "1fad4e1",
  "build_date" : "2019-06-18T13:16:52.517138Z",
  "build_snapshot" : false,
  "lucene_version" : "7.7.0",
  "minimum_wire_compatibility_version" : "5.6.0",
  "minimum_index_compatibility_version" : "5.0.0"
 },
 "tagline" : "You Know, for Search"
}

Моя база данных работает, перенесена и заполнена нормально. Кажется, эти три строки в routes/web.php нарушают код: -

App\Content::createIndex($shards = null, $replicas = null);
App\Content::putMapping($ignoreConflicts = true);
App\Content::addAllToIndex();

Эти настройки являются основополагающими для настройки ElasticSearch?

Я гуглил, и у других людей были похожие проблемы, но я не смог найти окончательного решения. Вы можете пролить свет на это?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
3
0
1 622
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что каждый докер почти как изолированная среда.

Итак, ваше приложение (работающее на http://localhost:3024) пытается подключиться к localhost:9200 в том же контейнере. и, таким образом, это приводит к ошибке, которую вы получаете.

Чтобы это исправить, вам нужно соединить оба контейнера через сеть.

Прочтите это: Docker Network Connect

У меня каждая служба (selenium, elasticsearch) работает в одном контейнере. Нужно ли их подключать? . Я получаю сообщение об ошибке «В вашем кластере не найдено активных узлов».

Amit 18.08.2022 09:41

Вообще говоря, лучше, если вы разделите свои службы (1 служба на контейнер), в этом весь смысл контейнеров. Однако, если вы запускаете службы в одном и том же контейнере, вы не можете просто подключить их без сети. Если вы получаете эту ошибку, убедитесь, что ваши экземпляры elasticsearch запущены и работают, и что вы подключаетесь с правильным ip/ порт

Abdullah Hejazi 19.08.2022 10:15

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