【问题标题】:Why am I getting "No alive nodes found in your cluster" using Laravel and Docker?为什么我使用 Laravel 和 Docker 得到“在您的集群中找不到活动节点”?
【发布时间】:2019-06-30 14:35:55
【问题描述】:

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

php artisan elastic:create-index "App\TutorialIndexConfigurator"

我得到一个错误:

No alive nodes found in your cluster

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

curl: (7) Failed to connect to localhost port 9200: Connection refused

但是当我从终端做同样的想法时,我会得到有关 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

这里是 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'),
];

和 .env 侦察配置

SCOUT_DRIVER=elastic

【问题讨论】:

    标签: laravel docker elasticsearch


    【解决方案1】:

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

    【讨论】:

    • 谢谢你。
    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2021-01-04
    相关资源
    最近更新 更多