为什么使用 Laravel 和 Docker 时会出现“在您的集群中找不到活动节点”?

Evg*_*kiy 2 elasticsearch laravel docker

我尝试使用 docker 和 babenkoivan/scout-elasticsearch-driver 在 laravel 项目上设置 elasticsearch。当我启动 docker 时,所有工作的容器都包括 elasticsearch,但是当我尝试使用

php artisan elastic:create-index "App\TutorialIndexConfigurator"
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

No alive nodes found in your cluster
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试从 docker 工作区容器通过 curl 访问端口 9200 时,我得到

curl: (7) Failed to connect to localhost port 9200: Connection refused
Run Code Online (Sandbox Code Playgroud)

但是当我从终端做同样的想法时,我得到了关于 docker elasticsearch 集群的信息。我想这可能是相关的。

我为这个问题浪费了三天,我没有任何解决方案,请帮助。

我试图从 laradock 做同样的事情,并得到同样的结果。

这是我的 docker-compose.yml 内容

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
Run Code Online (Sandbox Code Playgroud)

这是scout_elastic 配置

<?php

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'),
];
Run Code Online (Sandbox Code Playgroud)

和 .env 侦察配置

SCOUT_DRIVER=elastic
Run Code Online (Sandbox Code Playgroud)

mat*_*ish 5

我相信你的问题是错误的SCOUT_ELASTIC_HOST
应该SCOUT_ELASTIC_HOST=http://elasticsearch:9200 像在 kibana 服务中。不是http://localhost:9200

  • 这次真是万分感谢。 (2认同)