2016-06-16 10 views
0

ich Setup Kommunikation mit Blick bin bidirektionale zwischen Docker containers.I haben folgende Behälter:Docker bidirektionale Kommunikation zwischen Containern

1.Apache 
2.Tomcat A 
3.Tomcat B 
4.Tomcat C 
5.MySQL 

Apache fungiert als Reverse-Proxy und leitet Anfragen an Tomcat A, B und C. Alle Tomcat-Container kommunizieren mit der MySQL-Datenbank. Ab sofort habe ich Links in Apache, um Anfragen an Tomcat-Container zu senden, und Tomcat-Container haben Links zur Kommunikation mit MySQL-Datenbanken. Nun muss ich eine bidirektionale Kommunikation zwischen Tomcat-Containern einrichten. Tomcat A möchte mit Tomcat B und Tomcat C kommunizieren und umgekehrt. Wie können wir das mit Docker Compose erreichen? Ist es möglich, bidirektionale Links in der Datei docker-compose.yml bereitzustellen?

Vielen Dank im Voraus.

Antwort

1

Nein, Links sind nicht bidirektional, so dass Sie dies nicht erreichen können.

Sie können Ihre Container im selben Netzwerk einrichten, sodass sie über ihren Containernamen aufeinander zugreifen können.

Zum Beispiel

docker network create newnetwork 
docker run -d --name apache --net=newnetwork Apache 
docker run -d --name tomcatA --net=newnetwork TomcatA 
... 

das tun, wird der Container Apache Lage sein ping/Zugang tomcatA und tomcatA wird ping/Zugang Apache Lage sein.

Werfen Sie einen Blick auf, wie Netzwerke mit Docker-compose zu integrieren: https://docs.docker.com/compose/networking/#specifying-custom-networks

ich dieses Teil bin nicht sicher, aber da Docker ~ 1,10, scheint es, dass Sie ein Netzwerk nicht erstellen müssen, die Das Standardnetzwerk verbindet alle Container miteinander, so dass Sie bereits über den Namen jedes Containers von den anderen aus pingen/darauf zugreifen können. (Schauen Sie sich die Datei/etc/hosts in den Containern an, wenn Sie den Namen des anderen Containers und ihre IP-Adresse sehen können.)

+0

Vielen Dank. Ja, ich benutze jetzt docker ~ 1.11 und es sieht so aus, als ob docker compose automatisch ein einzelnes Netzwerk basierend auf dem Projektnamen mit dem "bridge" -Treiber erstellt und jeder Container für einen Dienst diesem Netzwerk beitritt und beide von anderen Containern in diesem Netzwerk erreichbar sind und von ihnen bei einem Hostnamen iden- tifiziert werden können, der mit dem Containernamen identisch ist. Ich habe versucht, Container 2 (mit seinem Containername) aus Container 1 anzupingen, und es funktioniert wie erwartet. Es sind jedoch keine Hosteinträge vorhanden, die auf einen anderen Containernamen und eine IP-Adresse in der Datei/etc/hosts verweisen. – Nanab4u

+0

Ok vielleicht/etc/hosts war eine alte Implementierung und sie verwenden jetzt einen neuen Mechanismus, ich werde es mir ansehen –

Verwandte Themen