2016-05-10 22 views
1

ich von meinem Web-App zu einer Elasticsearch Instanz verbinden Sie den Java-API:Wie Elasticsearch mit Docker Compose verbinden

static Optional<Client> getClient(String hostName, int port) { 
    return getHost(hostName).map(host -> TransportClient.builder().build() 
     .addTransportAddress(new InetSocketTransportAddress(host, port)) 
); 
} 

static Optional<InetAddress> getHost(String hostName) { 
    InetAddress host = null; 
    try { 
    host = InetAddress.getByName(hostName); 
    } catch (UnknownHostException e) { 
    LOG.warn("Could not get host: {}", hostName, e); 
    } 
    return Optional.ofNullable(host); 
} 

Vor dem Docker Compose Schalen, begann ich Elasticsearch

docker run --net=my-network --name=myDb elasticsearch 

mit und Meine Web-App mit

docker run --net=my-network -p 8080:4567 me/myapp 

und sicher genug, ich könnte uns mit der Datenbank verbinden ing getClient("myDb", 9300).

Aber jetzt, wo ich zu Docker Compose gewechselt habe, weiß ich nicht, wie man sich mit Elasticsearch verbindet. Dies ist meine aktuelle docker-compose.yml:

version: '2' 

services: 
    my-app: 
    image: me/myapp 
    ports: 
     - "8080:4567" 
    networks: 
     - my-network 

    elasticsearch: 
    image: elasticsearch 
    networks: 
     - my-network 

networks: 
    my-network: 
    driver: bridge 

Verständlicherweise führt dies zu einer UnknownHostException, da ich nicht den Hostnamen meiner Elasticsearch Instanz im docker-compose.yml gesetzt haben.

Wie mache ich das?

Antwort

0

Ich hatte ein alias zu setzen: ich myDb auf Port 9300 verbinden können

elasticsearch: 
    image: elasticsearch 
    networks: 
     my-network: 
     aliases: 
      - myDb 

Nun, wenn getClient("myDb", 9300) in der Frage gezeigt aufrufen.

Verwandte Themen