2017-10-20 2 views
0

Ich habe eine Reihe von Schwarm-Container (jetzt in einem einzigen Host, aber möglicherweise in einem Multihost-System, konform mit einem Multinode-Schwarm). Das System besteht aus einem Datenserver und einer Gruppe von autonomen Mitarbeitern, die die vom Server empfangenen Bits verarbeiten und die Ergebnisse aufnehmen. Die Erfassung der Eingabedaten und die Ausgabe der Daten erfolgt mit HTTP GET/POST. Die Serverseite (Datenbereitstellung und Ergebnisempfang) funktioniert, und wenn sie mit einem Worker getestet wird, der auf einem Host ohne Docker ausgeführt wird, wird sie problemlos ausgeführt. Aber ich muss diese Arbeiter in einen Dockerschwarm stecken.Docker: Schwarm Arbeiter Verbindung zum Server

Was ich nicht erreichen kann, ist die Kommunikation zwischen den verschiedenen Schwarmarbeitern und dem externen Server. Mein Server befindet sich in einem Host mit der IP 10.69.180.30, im Hafen 8080.

python test-dataserver.py -H 10.69.180.30 -p 8080 

Nach dem Graben in mehreren Foren läuft, habe ich versucht, ein Overlay-Netzwerk mit --subnet 10.69.180.0/24 zu erstellen, und dann Starten Sie den Service von Mitarbeitern, die mit diesem Netzwerk verbunden sind, in einem anderen Host. Aber auf keinen Fall.

docker network create --driver overlay --subnet 10.69.180.0/24 mynet 
docker service create --network mynet --name mysrv --replicas 4 \ 
       centos curl http://10.69.180.30:8080/get_task 

In diesem einfachen Beispiel, das ich curl nicht die Arbeiter nennen, sondern nur an die Adresse des Servers und der get_task Knoten. Es sollte eine JSON Zeichenfolge mit Informationen über die auszuführende Aufgabe zurückgeben. Aber auf der Serverseite bekomme ich keine Anfrage.

Ich bin kein Netzwerk-Experte, so dass ich vielleicht etwas fehlt trivial sein ... (BTW, habe ich versucht zuerst, das Gleiche zu tun, aber der Server in dem gleichen Host, ohne Erfolg ausgeführt haben.)

Wissen Sie, ob diese Einrichtung möglich ist? Ich werde sehr schätzen jeden Hinweis, um diese Arbeit zu machen ...

Vielen Dank im Voraus!

Antwort

1

ich würde ein Overlay-Netzwerk mit Dockers Standard-IP-Bereich

Docker Netzwerk --driver Overlay mynet

erstellen erstellen Danach den externen Host auf die Dienste hinzuzufügen.

docker service create 
     --add-host external:10.69.180.30 \ 
     --network mynet --name mysrv --replicas 4 \ 
     centos curl http://external:8080/get_task 
+0

Aber, schafft Schwarm create Befehl '--add-host' Option? Ich dachte, es wäre nur für _traditional_ Container verfügbar. Zumindest funktioniert es nicht in meinem System ... – aardalath

+0

Definitiv funktioniert es! Ich meine, wenn ich das Bild so modifiziere, dass die Datei "/ etc/hosts" die IP des Servers enthält, wird die Kommunikation hergestellt! Jetzt möchte ich das gleiche erreichen, ohne das Bild der Container stimmen zu müssen ... – aardalath

Verwandte Themen