6

Server Specs:Docker Brücke Netzwerk, HTTP Anrufe zwischen Containern sehr langsam (nach dem Upgrade Docker)

os: Ubuntu 14.04 
docker: 1.10.2 
docker-compose: 1.6.0 

Erst kürzlich 1,9-1,10 aktualisiert und hinzugefügt Docker-compose (noch nicht jedoch mit komponieren). Das Langsamkeitsproblem trat vor dem Upgrade nicht auf.

Auch ist Docker mit meinem DNS-IP und Proxy konfiguriert wie so in '/ etc/default/Docker'

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --dns 138.XX.XX.X" 
export http_proxy="http://proxy.myproxy.com:8888/" 

(meine ip voll da Dinkel, nur X mit für Frage)

ich habe zwei Behälter (container_a, container_b) beide Lauf HTTP-Server (Node.js), beiden Behälter auf einem Brückennetzwerk ausgeführt werden (--net = MyNetwork) I erzeugt über:

docker network create mynetwork 

Die beiden Behälter machen HTTP Anrufe untereinander die container_name als „Host“ für den HTTP-Aufrufe wie so verwenden:

container_b:3000/someurl 

Diese Anrufe zwischen den beiden Behältern über die Docker Brücke Netz nehmen eine sehr lange Zeit bis zum Abschluss (~ 5 Sekunden). Diese Aufrufe dauern normalerweise unter 100 ms.

Wenn ich das Netzwerk von --net = mynetwork auf diesen Containern ändern und stattdessen beide als --net = Host ausführen, während auch meine http-Aufrufe ändern, um "localhost" als Host anstelle des Containernamens und zu verwenden Offenlegen ihrer Ports über eine -p-Flag ... Die Aufrufe werden in der erwarteten Zeit von < 100ms ausgeführt.

Es scheint, dass das Docker Brückennetzwerk verursacht, dass meine Anrufe zwischen Containern sehr lange dauern.

Irgendwelche Ideen, wo ich schauen kann, um dieses Problem zu diagnostizieren/zu korrigieren?

Antwort

4

Dieses Problem war das Ergebnis einer Änderung an einem internen DNS, das als Teil von Docker 1.10 freigegeben wurde.

Weitere Informationen über finden Sie hier: https://github.com/docker/docker/issues/20661

I aktiviert den Debug-Modus auf den Dämon und schaute durch das Protokoll als ich Anfragen gestellt. Ich konnte es zuerst "8.8.8.8" ausprobieren, bevor ich zu "8.8.4.4" weiterging und schließlich zu der DNS-IP kam, die ich für meinen Host und die Auflösung hinzugefügt hatte. Meine Vermutung ist, dass mein Firmen-Proxy die ersten zwei Anfragen (8.8 ..) veranlasst, zu hängen und schließlich eine Zeitüberschreitung zu verursachen, was dazu führt, dass die Langsamkeit bei der richtigen IP aufgelöst wird, die die dritte in der Liste war.

Meine Lösung war, die DNS-Reihenfolge in meiner/etc/default/docker-Datei zu ändern, um meine interne IP zuerst zu haben.

DOCKER_OPTS="--dns 138.XX.XX.X --dns 8.8.8.8 --dns 8.8.4.4 " 

Dies scheint unser Problem zu beheben, da es unsere container_name-basierten HTTP-Anfragen zwischen Containern zuerst zu dieser Host-DNS-IP auflöst.

+0

Haben Sie diese Datei in einem Container gefunden? – Notflip

+0

@Notflip '/ etc/default/docker' ist die Konfigurationsdatei des Docker-Daemons. Es lebt auf dem Host-Rechner. –

Verwandte Themen