Docker odbija da kreira mrežu s porukom da se pul preklapa s drugim u ovom adresnom prostoru, i neko odluči da VPN ruta mora biti uzrok. Ne može biti. Ta greška nastaje dok se pul dodjeljuje, prije nego što postoji ijedan paket, i ručna kernel ruta na nju ne utječe. VPN je važan korak kasnije, kada kontejner koji već ima adresu prestane biti dostupan nakon što se pojavi ruta. Dva problema, dva skupa dokaza, a njihovo miješanje daje promjenu koja ne popravlja nijedan.

Dvije greške koje izgledaju isto

Greška dodjele je aritmetička. Docker upoređuje podmrežu koju ste tražili s podmrežama kojima već upravlja, nalazi presjek i odbija. Ništa još ne radi, pa nema rute, nema kontejnera i nema saobraćaja za pregled.

Simptom u radu je pitanje dosegljivosti. Kontejner koji je juče odgovarao sada ne odgovara, a nešto se promijenilo u hostovoj tabeli rutiranja. Kontejner i dalje drži svoju adresu; pitanje je kojim putem ta adresa ide.

Oba su problemi adresnog plana. Samo je jedan od njih Dockerov problem.

Prvo pročitajte dodijeljene pulove

Izlistajte mreže i pregledajte one koje bi se mogle presjeći. Podmreža živi u IPAM konfiguraciji, a povezani kontejneri su navedeni odvojeno:

docker network ls
docker network inspect EXISTING_NETWORK

Uporedite tu podmrežu s pulom koji nova mreža traži i zapamtite da Compose stvara vlastitu zadanu mrežu po projektu. Sukob s projektom koji ste zaboravili izgleda tačno kao sukob s daemonom.

Statički ipv4_address na servisu je adresa jednog kontejnera, a ne definicija pula. Njegova promjena ne uklanja preklapanje, jer je preklapanje između mrežnih podmreža, a ne između kontejnera. Dockerov network-create priručnik zahtijeva podmreže koje se ne preklapaju za običnu dodjelu preko bridgea i dokumentuje kako eksplicitno odabrati jednu.

Odaberite prefiks koji preživi VPN

Neposredni sukob i buduću rutu odlučuje isti izbor, pa ga napravite jednom. Uporedite kandidatni raspon s LAN-om, sa svakim VPN odredištem do kojeg host može doći i s bilo kojim drugim overlayem u upotrebi.

Prefiks koji zadovoljava Docker i sudara se s udaljenom mrežom daje vam kontejner koji se čisto pokreće i postaje nedostupan u trenutku kada se tunel podigne. To je druga greška u ovom članku, i mnogo ju je teže dijagnostikovati kasnije nego izbjeći sada.

Zapišite odabrane raspone negdje odakle ih sljedeći projekt može pročitati. Registar dodijeljenih prefiksa u jednom redu jeftiniji je od sedmice neobjašnjenih tajmauta.

Povucite ili promijenite mrežu namjerno

Za novu Compose mrežu postavite neiskorišteni prefiks u IPAM konfiguraciji mreže. Za postojeći projekt planirajte prenumeraciju: fiksne adrese, zavisni servisi i korak ponovnog kreiranja mreže sve moraju biti uračunati, jer uređivanje YAML-a ne prenumeriše mrežu koja radi.

Ako zastarjela mreža posjeduje konfliktnu dodjelu, pregledajte ko je povezan prije uklanjanja. docker network rm odbija dok postoje aktivni endpointi, a docker stop prima imena ili ID-ove kontejnera, a ne ime mreže. Zaustavljanje kontejnera također ne uklanja definiciju mreže koja drži pul.

Široki prune nije dijagnostički alat. Doseže nepovezane projekte i uništava dokaze koje ste upravo namjeravali prikupiti.

Zadani pulovi pomažu samo sljedećoj dodjeli

Postavka zadanog pula adresa daemona poboljšava buduće automatske dodjele držeći ih izvan raspona koje rezervišete. Ona ne mijenja retroaktivno adrese mreža koje već postoje, i ne rješava eksplicitnu podmrežu koja se preklapa s drugom eksplicitnom podmrežom.

Tretirajte tu postavku kao odvojenu, planiranu promjenu s vlastitim restartom, ne kao dio popravke jednog projekta. Miješanje dvoga znači da restart daemona padne u sredinu nepovezane istrage. Zakažite ga u vlastitom terminu. Zatim potvrdite da jedna nova automatska dodjela zaista završi izvan raspona koje ste rezervisali.

Kada kreiranje uspije, provjerite podmrežu koja stvarno radi, a zatim uputite jedan stvarni zahtjev aplikacije s VPN-om u njegovom predviđenom stanju. Ako je pul valjan, a pristup i dalje ne uspijeva, preostali posao je odabir rute, filtriranje i povratni put. To je istraga u radu, i ona ne čini grešku dodjele retroaktivno besmislenom.

Redoslijed rada: pročitajte dodijeljene pulove, odaberite prefiks koji zaobilazi i Docker i VPN odredišta, namjerno ponovo kreirajte mrežu, zatim testirajte jedan zahtjev s podignutim tunelom.

Povezani članci