2016-07-30 12 views
5

Hier Elasticsearch ist mein docker-compose.ymlkonnte keine Verbindung mit PHP innerhalb Docker

nginx: 
    build: ./nginx/ 
    ports: 
     - 80:80 
    links: 
     - php 
    volumes_from: 
     - app 

php: 
    image: php:7.0-fpm 
    expose: 
     - 9000 
    volumes_from: 
     - app 
    links: 
     - elastic 

app: 
    image: php:7.0-fpm 
    volumes: 
     - .:/var/www/html 
    command: "true" 

elastic: 
    image: elasticsearch:2.3 
    volumes: 
     - ./elasticsearch/data:/usr/share/elasticsearch/data 
     - ./elasticsearch/logs:/usr/share/elasticsearch/logs 
    expose: 
     - "9200" 
    ports: 
     - "9200:9200" 

Wenn ich versuche, Elasticsearch zugreifen, indem er auf localhost:9200 geht es funktioniert.

Aber wenn ich versuche, einen Index mit PHP erstellen ich die folgende Fehlermeldung erhalten:

Fatal error: Uncaught Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster in

Hier ist der Client-Code:

<?php 

namespace App\Elasticsearch; 

use Elasticsearch\ClientBuilder; 

    class Client 
    { 
     public static function getClient() 
     { 
      return ClientBuilder::create() 
       ->build(); 
     } 
    } 

-Code ein Elasticsearch Objekt zu instanziiert:

<?php 

require 'vendor/autoload.php'; 

use App\Elasticsearch\Client; 
use App\Elasticsearch\Indices\UserIndex; 

$es = Client::getClient(); 

Wenn ich var_dump($es), dumps das Elasticsearch-Client-Objekt.

Wenn ich jedoch versuche, einen Index zu erstellen, wird ein Fehler ausgegeben.

<?php 

namespace App\Elasticsearch\Indices; 

use App\Elasticsearch\Indices\AbstractIndex; 
use Elasticsearch\Client; 

    class UserIndex extends AbstractIndex 
    { 
     public function __construct(Client $client) 
     { 
      $this->client = $client; 
     } 
    } 

    // Create User Index 
    $userIndex = new UserIndex($es); 
    var_dump($userIndex->createIndex('users')); 

aktualisieren

Von enter link description here

diese Seite. Ich habe versucht,

$es = Client::getClient(); 

try { 
    // Create User Index 
    $userIndex = new UserIndex($es); 
    var_dump($userIndex->createIndex('users')); 
} catch (Exception $e) { 
    var_dump($es->transport->getLastConnection()->getLastRequestInfo()); 
} 

und jetzt zeigt es mir Locken Fehler d.h

["curl"] array(2) { ["error"] "Failed to connect to localhost port 9200: Connection refused" ["errno"] 7

+0

Sieht aus wie ein Port Problem in der Tat (ein bisschen wie in https://github.com/elastic/elasticsearch-php/issues/408#issuecomment -207045443) – VonC

+0

Auch ein bisschen wie https://github.com/elastic/elasticsearch-php/issues/425#issuecomment-231548912 – VonC

+0

Wie greifen Sie auf das elastische von PHP? – opHASnoNAME

Antwort

2

Sie haben versucht, den lokalen Host zu verbinden, aber Sie müssen „elastisch“ Host verbinden. versuchen eine Verbindung von PHP wie folgt Elasticsearch:

$hosts = [ 
    'elastic', // elastic host was added to you hosts file automatically 
]; 
$client = ClientBuilder::create() 
    ->setHosts($hosts) 
    ->build(); 

Containers for the linked service will be reachable at a hostname identical to the alias, or the service name if no alias was specified.

+0

Das hat nicht geholfen. Eigentlich App: ist meine Daten nur Container (nicht sicher, ob ich den richtigen Begriff verwende, begann gerade Docker zu lernen). Wenn Sie PHP sehen: Ich habe bereits einen Link zu elastischen. –

+0

Ja, mein Fehler, ein Gedanke App Container ist ausführbar, aber es ist nur Container für PHP-Dateien. –

+1

Eventuell ist ein Problem beim Festlegen des elastischen Hosts in der Factory. Client :: getClient(); versuchen, addHost() aufrufen. Rückgabe ClientBuilder :: create() -> setHost (['elastische']]) -> build(); wenn es nicht funktioniert, zeige/etc/hosts von php container, bitte! –