2017-07-19 4 views
1

Ich habe diese einfache Einrichtung: A Dockerfile:Connect von Docker Container Host Elasticsearch Instanz runing

FROM centos:latest 
RUN yum update -y 
RUN yum install -y epel-release 
RUN yum install -y java-1.8.0-openjdk 
RUN yum install -y curl 
RUN mkdir /var/totest 
EXPOSE 9200 
EXPOSE 9300 

Und auf Host-Maschine Ich habe eine laufende Instanz von Elasticsearch 5.4.2.

Wenn ich auf dem Host tun curl http://localhost:9200 erhalte ich die richtige Antwort:

{ 
    "name" : "T8apV_J", 
    "cluster_name" : "elasticsearch", 
    "cluster_uuid" : "YFkkaM8dSJCnXbDFRFD_aw", 
    "version" : { 
    "number" : "5.4.2", 
    "build_hash" : "929b078", 
    "build_date" : "2017-06-15T02:29:28.122Z", 
    "build_snapshot" : false, 
    "lucene_version" : "6.5.1" 
    }, 
    "tagline" : "You Know, for Search" 
} 

aber, wenn ich das Docker Bild bauen, und ich laufen

docker run -p 9200:9200 -it my-simple-image /bin/bash 

ich diesen Fehler:

docker: Error response from daemon: driver failed programming external connectivity on endpoint infallible_brown (71c6fae1275d149b2708a1aa9b737278d340c4e7b073d858b4222eb0268ef285): Error starting userland proxy: listen tcp 0.0.0.0:9200: bind: address already in use. 

Wie kann ich vom Docker Container zu dem Host verbinden, auf dem elasticsearch instan ausgeführt wird ce?

Alles was ich brauche ist in der Lage sein, aus dem Innern des Behälter

curl http://localhost:9200/index_name/_search

Antwort

0

Elasticsearch Anwendungen Port 9200. Jetzt möchten Sie Port 9200 von einem Container zu localhost veröffentlichen. Sie können nicht zwei Anwendungen auf dem gleichen Port von localhost hören.

0

Sie durchführen müssen, die EXPOSE 9200 Direktive in den Dockerfile entfernen, da die Portnummer 9200 bereits durch den elastischen Suchdienst genommen wird.

Sie sollten curl mit der IP-Adresse Ihres Host-Computers. Docker befestigt Container an das Netzwerk bridge, um damit zu beginnen, also benötigen Sie eine Möglichkeit, die IP-Adresse des Hosts zu erhalten.

Je nachdem, ob Ihr Host mit einem weiteren Netzwerk verbunden ist oder nicht, müssen Sie möglicherweise einen Alias ​​festlegen. Ich habe diesen Alias ​​für meine bridge0 Schnittstelle festgelegt.

sudo ifconfig bridge0 alias <ip_address> 

Wenn Ihr Host zu einem größeren Netzwerk verbunden sind, verwenden Sie die inet-Adresse des Geräts zu Ihrem Ethernet zugeordnet. Sie können, indem Sie den inet Adresse erhalten:

ifconfig en0 | grep "inet " | cut -d " " -f2 

Sie können entweder Weise passieren die inet-Adresse des Netzwerkschnittstelle als Umgebungsvariable Andockfenster:

docker run -e MY_HOST_IP=$(ip_address) -it my-simple-image /bin/bash 
# or 
docker run -e MY_HOST_IP=$(ifconfig en0 | grep "inet " | cut -d " " -f2) -it my-simple-image /bin/bash 

curl $MY_HOST_IP:8000 

See this thread for more information about your question

Verwandte Themen