Dijeljenje mrežnog imenskog prostora VPN kontejnera daje vašoj aplikaciji sučelja i rute tunela. Ono joj ne daje razrješivač tunela, ni objedinjenu kopiju bilo čega drugoga na hostu. Taj jaz proizvodi vrlo specifičnu grešku: javna imena se razrješavaju, interna ne, a aplikacija koja padne izgleda kao da koristi pogrešan DNS poslužitelj, jer i koristi. Popravak je obično manji nego što dijagnoza sugerira.

Korak 1: Testirajte iz aplikacije, ne s hosta

Pokrenite pretragu unutar kontejnera koji ima problem, ne na hostu i ne u pregledniku. docker exec app-container getent hosts db.internal odgovara na jedino pitanje koje je važno, a to je što razrješivač ovog procesa vraća.

Ako host razrješava ime a kontejner ne, pronašli ste kvar. Sve poslije ovoga je biranje podržanog načina da ga popravite.

Korak 2: Pročitajte podržani model runtimea

Dockerova dokumentacija o mrežama bilježi ograničenja DNS zastavica za kontejnere koji dijele mrežni način rada drugog kontejnera. U Composeu network_mode: service:vpn veže aplikaciju za imenski prostor VPN kontejnera, a po usluzi dns postavke se ne ponašaju kao kod obične usluge. Rješenje koje dobijete je ono koje ima dijeljeni imenski prostor.

Korisnički definirane mostovne mreže također koriste Dockerov ugrađeni DNS drugačije od zadanog mosta. Zato dns stavka kopirana iz radnog primjera mosta ne može učiniti baš ništa u dijeljenom stacku. Provjerite raspored prije kopiranja stavke.

Adresa povratne petlje uvijek se odnosi na relevantni mrežni kontekst. Unutar dijeljenog imenskog prostora 127.0.0.1 nije razrješivač hosta.

Korak 3: Pratite upit do njegovog primatelja

Pročitajte konfiguraciju razrješivača aplikacije, zatim svaki aplikacijski specifičan šifrirani DNS koji aplikacija donosi, jer aplikacija koja pokreće vlastiti razrješivač ignorira datoteku koju ste uredili. Zatim provjerite je li odabrani razrješivač dostupan pod VPN rutama i politikom vatrozida. Adresa razrješivača s druge strane tunela beskorisna je ako imenski prostor nema rutu do nje. Potvrdite primatelja prije nego uredite bilo koju datoteku.

Stranica za provjeru IP-a u pregledniku ne može vam reći kamo su otišli upiti za imenima. Ona kaže kamo je otišla jedna HTTP veza.

Korak 4: Popravite dvije klase kvarova različito

Ako imena usluga padaju dok javna imena rade, problem je otkrivanje usluga unutar mreže kontejnera, a ne popis javnih razrješivača. Promjena svake javne DNS adrese neće stvoriti zapise koje mehanizam za otkrivanje mreže nikada nije bio zamoljen da stvori.

Ako obje klase padaju, počnite s dostupnošću razrješivača. Ako pada samo jedna, počnite s mehanizmom za otkrivanje. Njih dvije imaju različite vlasnike, zato jedna popravka nikada ne pokriva obje.

Korak 5: Ponovno testirajte nakon ponovnog stvaranja

Promijenite konfiguraciju kroz podržani mehanizam runtimea, zatim ponovno stvorite kontejnere umjesto uređivanja datoteka unutar pokrenutog. Testirajte svježe privatno ime, svježe javno ime i aplikacijski zahtjev koji slijedi pretragu. Uređivanje datoteke /etc/resolv.conf unutar kontejnera nestaje pri ponovnom stvaranju i uvjerit će vas da je popravak radio kad nije.

Zabilježite vlasnika razrješivača i očekivani imenski prostor uz definiciju dijeljene mreže. Sljedećoj osobi trebat će oboje.

Povezani članci