2016-02-18 12 views
6

Mam kilka usług działających w kontenerach doków i jeden serwer nginx przed nimi, wszystkie kontenery w tej samej sieci dokerów. Przed dokowaniem 1.10 stworzyłem kontener dnsmasq i wewnątrz niego ustawiono przelicznik, aby moje usługi mogły zostać odkryte z nginx.Nginx nie otrzymuje hosta z wbudowanego DNS w docker 1.10.1

Po uaktualnieniu do okna dokowanego 1.10.1 obraz dnsmasq nie działa. Po pewnych badaniach próbowałem użyć nowego "osadzonego dns" zamiast adresu 127.0.0.11 (co moim zdaniem powinno być właściwym sposobem użycia w sieci dokerów). Chociaż mogę pingować do kontenera usługowego z kontenera nginx, ale nginx nadal wysyła odpowiedź could not be resolved (3: Host not found).

A potem próbował użyć komendy hosta, mam wynik bardzo mylący: (pierwszy adres IP, a następnie nie Znaleziono hosta - ten sam kod co mam z nginx)

# host service-ui 
service-ui has address 172.18.0.7 
Host service-ui not found: 3(NXDOMAIN) 
Host service-ui not found: 3(NXDOMAIN) 

Ping działa

/# ping service-ui 
PING service-ui (172.18.0.7): 56 data bytes 
64 bytes from 172.18.0.7: icmp_seq=0 ttl=64 time=1.123 ms 
64 bytes from 172.18.0.7: icmp_seq=1 ttl=64 time=0.131 ms 
64 bytes from 172.18.0.7: icmp_seq=2 ttl=64 time=0.178 ms 

Po to uproszczona wersja moich konfiguracjach:

doker-compose.yml

version: '2' 

services: 
    nginx: 
    build: . 
    ports: 
     - 80:80 
    service-ui: 
    image: service-ui 
networks: 
    default: 
    external: 
     name: ssx 

nginx.conf wewnątrz pojemnika

location ~ /([a-z]*)/ { 
    resolver 127.0.0.11; 
    proxy_pass http://$1-ui:9000$uri$is_args$args; 
} 

Tutaj też gadatliwy wynik z hostem:

# host -v service-ui 
Trying "service-ui" 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237 
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;service-ui.   IN A 

;; ANSWER SECTION: 
service-ui.  1800 IN A 172.18.0.7 

Received 52 bytes from 127.0.0.11#53 in 1 ms 
Trying "service-ui" 
Host service-ui not found: 3(NXDOMAIN) 
Received 102 bytes from 127.0.0.11#53 in 1 ms 
Received 102 bytes from 127.0.0.11#53 in 1 ms 
Trying "service-ui" 
Host service-ui not found: 3(NXDOMAIN) 
Received 102 bytes from 127.0.0.11#53 in 1 ms 
Received 102 bytes from 127.0.0.11#53 in 1 ms 

moja wersja doker

Client: 
Version:  1.10.1 
API version: 1.22 
Go version: go1.5.3 
Git commit: 9e83765 
Built:  Thu Feb 11 19:27:08 2016 
OS/Arch:  linux/amd64 

Server: 
Version:  1.10.1 
API version: 1.22 
Go version: go1.5.3 
Git commit: 9e83765 
Built:  Thu Feb 11 19:27:08 2016 
OS/Arch:  linux/amd64 

Czy ktoś może mi pomóc dowiedzieć się, co poszło nie tak ? Lub jak zagłębić się w ten problem?

Odpowiedz

9

To dlatego, że serwer DNS nie doker zrobić IPv6, ale kwerendy nginx resolwera zarówno dla IPv4 i IPv6 jak z 1.5.8: http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

można wyłączyć IPv6 dość łatwo na linii przelicznika w nginx (zobacz powyższy link, to tylko ipv6 = wyłączone), a następnie powinno zacząć działać dla Ciebie.

+0

Dziękuję @phobologic, pracował jako urok – waterscar

+0

OMG! Utknąłem na tym problemie już od wielu godzin, pomyślałem, że to moja konfiguracja nginx (jestem całkiem nowa dla nginx), ale w rzeczywistości rozwiązałeś ją @phobologic. Dzięki za pomoc! – nschoe

+1

Wersja 1.11 silnika zawiera teraz obsługę protokołu IPv6. Zobacz ogłoszenie na blogu: https://blog.docker.com/2016/04/docker-engine-1-11-runc/ – Subfuzion

Powiązane problemy