Docker odbija stvoriti mrežu s porukom da se pul preklapa s drugim u ovom adresnom prostoru, i netko odluči da VPN ruta mora biti uzrok. Ne može biti. Ta pogreš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 pogreške koje izgledaju isto

Pogreška dodjele je aritmetička. Docker uspoređ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 prometa za pregled.

Simptom u radu je pitanje dosegljivosti. Kontejner koji je jučer odgovarao sada ne odgovara, a nešto se promijenilo u hostovoj tablici usmjeravanja. 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

Usporedite 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 toč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 dokumentira kako eksplicitno odabrati jednu.

Odaberite prefiks koji preživi VPN

Neposredni sukob i buduću rutu odlučuje isti izbor, pa ga napravite jednom. Usporedite 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 pogreška u ovom članku, i mnogo ju je teže dijagnosticirati 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 tjedna 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 stvaranja mreže sve moraju biti uračunati, jer uređivanje YAML-a ne prenumerira mrežu koja radi.

Ako zastarjela mreža posjeduje konfliktnu dodjelu, pregledajte tko 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 rezervirate. 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 rezervirali.

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 pogreš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