Dockers fejl om puljeoverlap er ikke et VPN-ruteproblem
Den ene fejl opstår under tildeling, den anden efter en ruteændring. Læs IPAM-undernettene, før du rører containeradresser eller tunnelen.
Docker nægter at oprette et netværk med beskeden om, at puljen overlapper med en anden i dette adresserum, og nogen beslutter, at VPN-ruten må være årsagen. Det kan den ikke være. Den fejl opstår, mens en pulje tildeles, før der findes en enkelt pakke, og en manuel kernel-rute har ingen indflydelse på den. VPN betyder noget et skridt senere, når en container, der allerede har en adresse, holder op med at være nåbar, efter at en rute dukker op. To problemer, to sæt beviser, og blandes de, giver det en ændring, der ikke løser nogen af dem.
To fejl, der ligner hinanden
Tildelingsfejlen er aritmetisk. Docker sammenligner undernettet, du bad om, med de undernet, det allerede administrerer, finder et fælles snit og nægter. Intet kører endnu, så der er ingen rute, ingen container og ingen trafik at undersøge.
Driftssymptomet er et spørgsmål om nåbarhed. En container, der svarede i går, svarer ikke nu, og noget har ændret sig i værtens routingtabel. Containeren har stadig sin adresse; spørgsmålet er, hvilken vej den adresse tager.
Begge er adresseplanproblemer. Kun det ene er et Docker-problem.
Læs de tildelte puljer først
List netværkene, og undersøg dem, der kan overlappe. Undernettet ligger i IPAM-konfigurationen, og de tilknyttede containere er listet separat:
docker network ls
docker network inspect EXISTING_NETWORK
Sammenlign det undernet med den pulje, det nye netværk anmoder om, og husk, at Compose opretter sit eget standardnetværk pr. projekt. En konflikt med et projekt, du har glemt, ser præcis ud som en konflikt med daemonen.
En statisk ipv4_address på en tjeneste er én containers adresse, ikke puljedefinitionen. At ændre den fjerner ikke en overlapning, fordi overlapningen er mellem netværksundernet og ikke mellem containere. Dockers network-create-reference kræver ikke-overlappende undernet til almindelig bro-tildeling og dokumenterer, hvordan man vælger et eksplicit.
Vælg et præfiks, der overlever VPN
Den umiddelbare konflikt og den fremtidige rute afgøres af det samme valg, så træf det én gang. Sammenlign det mulige interval med LAN, med hver VPN-destination, værten kan nå, og med enhver anden overlay i brug.
Et præfiks, der tilfredsstiller Docker og støder sammen med fjernnetværket, giver dig en container, der starter rent og bliver unåelig i det øjeblik, tunnelen er oppe. Det er den anden fejl i denne artikel, og den er meget sværere at diagnosticere senere, end den er at undgå nu.
Skriv de valgte intervaller ned et sted, hvor det næste projekt kan læse dem. Et enlinjet register over tildelte præfikser er billigere end en uge med uforklarlige timeouts.
Nedlæg eller ændr et netværk med vilje
For et nyt Compose-netværk skal du sætte det ubrugte præfiks i netværkets IPAM-konfiguration. For et eksisterende projekt skal du planlægge omnummereringen: faste adresser, afhængige tjenester og trinnet med at genskabe netværket skal alle regnes med, fordi redigering af YAML ikke omnummererer et kørende netværk.
Hvis et forældet netværk ejer den konfliktende tildeling, skal du undersøge, hvem der er tilknyttet, før du fjerner det. docker network rm nægter, mens der findes aktive endpoints, og docker stop tager containernavne eller ID'er i stedet for et netværksnavn. At stoppe en container fjerner heller ikke netværksdefinitionen, der holder puljen.
En bred prune er ikke et diagnostisk værktøj. Den rammer urelaterede projekter og ødelægger de beviser, du var ved at indsamle.
Standardpuljer hjælper kun den næste tildeling
Daemonens indstilling for standardadressepulje forbedrer fremtidige automatiske tildelinger ved at holde dem uden for intervaller, du reserverer. Den giver ikke eksisterende netværk nye adresser bagudrettet, og den løser ikke et eksplicit undernet, der overlapper et andet eksplicit undernet.
Behandl den indstilling som en separat, planlagt ændring med sin egen genstart, ikke som en del af reparationen af et projekt. Blandes de to, lander en daemon-genstart midt i en urelateret undersøgelse. Planlæg den i sit eget vindue. Bekræft derefter, at en ny automatisk tildeling faktisk lander uden for de intervaller, du reserverede.
Når oprettelsen lykkes, skal du kontrollere det undernet, der faktisk kører, og derefter lave én rigtig applikationsanmodning med VPN i den tilsigtede tilstand. Hvis puljen er gyldig, og adgang stadig fejler, er det resterende arbejde rutevalg, filtrering og returvejen. Det er en driftsundersøgelse, og den gør ikke tildelingsfejlen bagudrettet meningsløs.
Arbejdsrækkefølge: læs de tildelte puljer, vælg et præfiks, der rydder både Docker og VPN-destinationerne, genskab netværket med vilje, og test derefter én anmodning med tunnelen oppe.