@Lenskiy-e

Почему может вылетать ошибка “No alive nodes found in your cluster” при использовании Laravel и Docker Elasticsearch?

Не могу подружить laravel и elasticsearch используя Docker и `babenkoivan/scout-elasticsearch-driver` .
Когда запускаю Docker, все контейнеры, включая elasticsearch, запускаются отлично, но при попытке ввода:
php artisan elastic:create-index "App\TutorialIndexConfigurator"

получаю ошибку:
No alive nodes found in your cluster
Так же, при попытке запроса на 9200 порт проекта через curl в docker workspace контейнере получаю
curl: (7) Failed to connect to localhost port 9200: Connection refused

при этом, если сделать такой же запрос с терминала, то получаю ответ от elasticsearch с json данными, то есть все ок. Я думаю основная проблема как-то с этим может быть связана.

Попробовал запустить такие же контейнеры с laradock - результат такой же.

Уже 3 дня борюсь и сдаюсь, потому очень прошу помочь.

Вот мой docker-compose.yml
spoiler

version: '3.1'
    
    #volumes:
    #  elasticsearch:
    #    driver: local
    
    volumes:
      esdata1:
        driver: local
      esdata2:
        driver: local
      esdata3:
        driver: local
    
    networks:
      esnet:
      frontend:
      backend:
    
    services:
      nginx:
        image: nginx
        ports:
            - "80:80"
            - "443:443"
        volumes:
          - ./hosts:/etc/nginx/conf.d
          - ./www:/var/www
          - ./logs:/var/log/nginx
        links:
          - php
        networks:
          esnet:
          frontend:
            aliases:
              - api.dev
          backend:
            aliases:
              - api.dev
    
      mysql:
        image: mysql:5.7
    
        ports: 
        - "3306:3306"
    
        volumes:
          - ./mysql:/var/lib/mysql
    
        environment:
            MYSQL_ROOT_PASSWORD: secret
    
        networks:
          - esnet
          - frontend
          - backend
    
      # postgres:
      #   image: postgres
    
      #   ports: 
      #     - "3306:3306"
    
      #   environment:
      #       MYSQL_ROOT_PASSWORD: secret
    
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
    
      php:
        build: ./images/php
    
        links:
          - mysql
    
        volumes:
          - ./www:/var/www
    
        networks:
          - esnet
          - frontend
          - backend
    
      workspace:
          build: ./images/workspace
          volumes:
            - ./www:/var/www:cached
          extra_hosts:
            - "dockerhost:10.0.75.1"
          ports:
            - "2222:22"
          tty: true
          networks:
            - esnet
            - frontend
            - backend
    
      redis:
        image: redis:latest
    
        volumes:
              - ./www/redis:/data
    
        ports:
          - "6379:6379"
    
    
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
        container_name: elasticsearch
        environment:
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - http.cors.enabled=true
          - http.cors.allow-origin=*
          - discovery.zen.minimum_master_nodes=2
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata1:/usr/share/elasticsearch/data
        ports:
          - 9200:9200
        networks:
          - esnet
          - frontend
          - backend
    
      lasticsearch2:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
        container_name: elasticsearch2
        environment:
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - "discovery.zen.ping.unicast.hosts=elasticsearch"
          - http.cors.enabled=true
          - http.cors.allow-origin=*
          - discovery.zen.minimum_master_nodes=2
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata2:/usr/share/elasticsearch/data
        networks:
          - esnet
          - frontend
          - backend
    
      elasticsearch3:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
        container_name: elasticsearch3
        environment:
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - "discovery.zen.ping.unicast.hosts=elasticsearch"
          - http.cors.enabled=true
          - http.cors.allow-origin=*
          - discovery.zen.minimum_master_nodes=2
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata3:/usr/share/elasticsearch/data
        networks:
          - esnet
          - frontend
          - backend
    
      kibana:
        image: 'docker.elastic.co/kibana/kibana:6.4.2'
        container_name: kibana
        environment:
          SERVER_NAME: kibana.local
          ELASTICSEARCH_URL: http://elasticsearch:9200
        ports:
          - '5601:5601'
        networks:
          - esnet
          - frontend
          - backend
    
      headPlugin:
        image: 'mobz/elasticsearch-head:5'
        container_name: head
        ports:
          - '9100:9100'
        networks:
          - esnet
          - frontend
          - backend


Так же конфиг scout_elastic
return [
        'client' => [
            'hosts' => [
                env('SCOUT_ELASTIC_HOST', 'localhost:9200'),
            ],
        ],
        'update_mapping' => env('SCOUT_ELASTIC_UPDATE_MAPPING', true),
        'indexer' => env('SCOUT_ELASTIC_INDEXER', 'single'),
        'document_refresh' => env('SCOUT_ELASTIC_DOCUMENT_REFRESH'),
    ];

И .env scout конфиг SCOUT_DRIVER=elastic
  • Вопрос задан
  • 5651 просмотр
Пригласить эксперта
Ответы на вопрос 2
Fernus
@Fernus
Техник - Механик :)

return [
        'client' => [
            'hosts' => [
                env('SCOUT_ELASTIC_HOST', 'localhost:9200'),
            ],
        ],
        'update_mapping' => env('SCOUT_ELASTIC_UPDATE_MAPPING', true),
        'indexer' => env('SCOUT_ELASTIC_INDEXER', 'single'),
        'document_refresh' => env('SCOUT_ELASTIC_DOCUMENT_REFRESH'),
    ];



Вместо localhost пропишите elasticsearch...
Ответ написан
@romanown
curl: (7) Failed to connect to localhost port 9200: Connection refused означает, что эластиксерч не доступен. как вариант по той причине, что он не запущен. а не работать он может по разным причинам. в первую очередь убедитесь что Elasticsearch запущен и прослушивает нужные адреса и порты. команды зависят от используемой операционной системы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы