2016-04-20 10 views
0

Ich habe zwei Anwendungen, von denen eine eine RESTful-Schnittstelle hat, die von der anderen verwendet wird. Beide laufen auf demselben Rechner.REST-Anforderung von einem Andock-Container zum anderen schlägt fehl

Anwendung A wird in einem Andock-Container ausgeführt. Ich verwende es über die Befehlszeile:

docker run -p 40000:8080 --name AppA image1 

Wenn ich die Anwendung B außerhalb eines Docker Container testen (in anderen Worten, bevor es dockerized wird) Anwendung B erfolgreich ausgeführt alle RESTful-Anfragen und Antworten empfängt ohne Probleme.

Leider, wenn ich dockerize und Anwendung B in einem Container ausgeführt wird:

docker run -p 8081:8081 --name AppB image2 

, wenn ich versuchen, eine RESTful Anforderung an die Anwendung A zu senden, ich folgendes erhalten:

Connect to localhost:40000 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused 

Natürlich Ich habe auch versucht, Application B mit der IP-Adresse meines Rechners zu verbinden. Wenn ich das tue, erhalte ich folgenden Fehler:

Connect to 192.168.1.101:40000 failed: No route to Host 

Hat jemand diese Art von Verhalten schon einmal gesehen? Was bewirkt, dass eine Anwendung, die perfekt mit einer anderen dockerisierten Anwendung außerhalb eines Andockcontainers kommuniziert, nicht mit derselben dockerisierten Anwendung kommunizieren kann, nachdem sie selbst dockerisiert wurde ???

Jemand bitte raten ...

+0

Verbinden Sie einfach B mit A 'Docker Run -p 8081: 8081 - Link AppA - Name AppB image2', dann können Sie auf den REST-Service zugreifen mit' AppA: 8080' –

Antwort

2

einfach Verknüpfung B nach A docker run -p 8081:8081 --link AppA --name AppB image2, dann können Sie den REST-Service AppA:8080 mit zuzugreifen.

Der Grund dafür ist, dass Docker-Container in einem eigenen Subnetz (normalerweise 172.17.0.0-255) ausgeführt werden und nicht auf das Netzwerk zugreifen können, auf dem sich Ihr Host befindet. Auch localhost wäre der Container selbst, nicht der Host.

+0

Danke für die Info. Ich habe ein anderes Szenario: Angenommen, AppB verwendet die Remote-API zum Starten von Instanzen von AppA und verwendet dann einen RESTful-Befehl zum Einrichten dieser Instanzen. Ich muss in der Lage sein, mehrere Instanzen von AppB gleichzeitig auszuführen und mit jeder Instanz über AppA zu kommunizieren, nachdem sie ausgeführt wurde. Gibt es eine Möglichkeit, zwischen den verschiedenen Instanzen zu unterscheiden (sie würden alle Port 8080 verwenden)? –

+0

Ich verstehe nicht vollständig, aber solange jede Instanz einen eindeutigen Namen hat, dann ist es in Ordnung –

+0

Ich vermute, dass dies ein ganz anderes Problem ist, das eine separate Frage erfordert. Ich werde eine neue Frage formulieren und sie stellen, wenn ich die Chance bekomme ... –