6

Specyfikacja serwera:Docker sieć most, połączeń HTTP między pojemnikach bardzo powoli (po uaktualnieniu Döcker)

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

Niedawno zmodernizowane od 1,9 do 1,10 i dodaje Döcker-Compose (nie używając komponować jeszcze jednak). Problem spowolnienia nie pojawił się przed aktualizacją.

także Docker jest skonfigurowany z mojego IP serwera DNS i pełnomocnika podobnie jak w '/ 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/" 

(moje IP jest w pełni wypisanym tam, po prostu przy użyciu X za pytanie)

że dwa pojemniki (container_a, container_b) obydwa z systemem serwera HTTP (node.js) oba pojemniki są działające na połączenie mostkowe (--net = MyNetwork), że utworzone przez:

docker network create mynetwork 

Dwa pojemniki zrobić HTTP zwraca między sobą używając container_name jako „host” dla połączeń HTTP tak:

container_b:3000/someurl 

tych połączeń dokonywanych pomiędzy dwoma pojemnikami przez sieć doker mostu biorą bardzo długo czas do zakończenia (~ 5 sekund). Te połączenia zwykle trwają mniej niż 100 ms.

Po zmianie sieci z --net = mynetwork na tych kontenerach, a zamiast tego uruchamiam je jako --net = host, a także modyfikuję moje wywołania http, aby używać "localhost" jako hosta zamiast nazwy kontenera i eksponowanie portów poprzez flagę -p ... Połączenia są uruchamiane w oczekiwanym czasie < 100ms.

Wygląda na to, że sieć mostowa w doku zwiększa moje połączenia między kontenerami przez bardzo długi czas.

Jakieś pomysły na temat tego, gdzie mogę sprawdzić diagnozę/rozwiązać ten problem?

Odpowiedz

4

Ten problem powstał w wyniku zmiany wewnętrznego systemu DNS wydanego w ramach dokowania 1.10.

Więcej informacji na temat można znaleźć tutaj: https://github.com/docker/docker/issues/20661

mam włączony tryb debugowania na demona i przejrzałem dzienniku jak zrobiłem żądań. Mogłem zobaczyć, że najpierw spróbowałem "8.8.8.8" przed przejściem do "8.8.4.4", a następnie w końcu dotarłem do adresu DNS, który dodałem do mojego hosta i rozwiązałem. Domyślam się, że mój korporacyjny serwer proxy powoduje, że te pierwsze dwie prośby (8.8 ..) zawieszają się, a w końcu limit czasu, powodując powolne rozwiązywanie problemu przy poprawnym IP, który był trzecim na liście.

Moim rozwiązaniem było zmienić kolejność DNS w pliku/etc/default/docker, aby mieć najpierw mój wewnętrzny adres IP.

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

To wydaje się naprawić nasz problem, ponieważ rozwiązuje nasze żądania HTTP oparte na nazwie kontenera między kontenerami najpierw na ten adres IP hosta hosta.

+0

Czy znalazłeś ten plik w pojemniku? – Notflip

+0

@Notflip '/ etc/default/docker' jest plikiem konfiguracyjnym demona docker. Żyje na komputerze-hoście. –

Powiązane problemy