Грешка преклапања pool-ова у Docker-у није проблем VPN руте
Једна грешка настаје током доделе, друга после промене руте. Прочитајте IPAM подмреже пре него што дотакнете адресе контејнера или тунел.
Docker одбија да направи мрежу са поруком да се pool преклапа са другим у овом адресном простору, и неко одлучи да VPN рута мора бити узрок. Не може бити. Та грешка настаје док се pool додељује, пре него што постоји иједан пакет, и ручна кернел рута на њу не утиче. VPN је важан корак касније, када контејнер који већ има адресу престане да буде доступан након што се појави рута. Два проблема, два скупа доказа, а њихово мешање даје промену која не поправља ниједан.
Две грешке које изгледају исто
Грешка доделе је аритметичка. Docker упоређује подмрежу коју сте тражили са подмрежама којима већ управља, налази пресек и одбија. Ништа још не ради, па нема руте, нема контејнера и нема саобраћаја за преглед.
Симптом у раду је питање достижности. Контејнер који је јуче одговарао сада не одговара, и нешто се променило у хост табели рутирања. Контејнер и даље држи своју адресу; питање је којим путем та адреса иде.
Обе су проблеми адресног плана. Само је један од њих Docker проблем.
Прво прочитајте додељене pool-ове
Излистајте мреже и прегледајте оне које би се могле пресећи. Подмрежа живи у IPAM конфигурацији, а повезани контејнери су наведени одвојено:
docker network ls
docker network inspect EXISTING_NETWORK
Упоредите ту подмрежу са pool-ом који нова мрежа тражи и запамтите да Compose ствара сопствену подразумевану мрежу по пројекту. Сукоб са пројектом који сте заборавили изгледа тачно као сукоб са демоном.
Статичка ipv4_address на сервису је адреса једног контејнера, а не дефиниција pool-а. Њена промена не уклања преклапање, јер је преклапање између мрежних подмрежа, а не између контејнера. Docker-ов network-create приручник захтева подмреже које се не преклапају за обичну доделу преко моста и документује како експлицитно изабрати једну.
Изаберите префикс који преживљава VPN
Непосредни сукоб и будућу руту одлучује исти избор, па га направите једном. Упоредите кандидат опсег са LAN-ом, са сваком VPN дестинацијом до које хост може доћи и са било којим другим overlay-ом у употреби.
Префикс који задовољава Docker и судара се са удаљеном мрежом даје контејнер који се чисто покреће и постаје недоступан у тренутку када се тунел подигне. То је друга грешка у овом чланку, и много ју је теже дијагностиковати касније него избећи сада.
Запишите изабране опсеге негде одакле их следећи пројекат може прочитати. Регистар додељених префикса у једном реду јефтинији је од недеље необјашњених тајмаута.
Повуците или промените мрежу намерно
За нову Compose мрежу поставите неискоришћени префикс у IPAM конфигурацији мреже. За постојећи пројекат испланирајте пренумерацију: фиксне адресе, зависни сервиси и корак поновног стварања мреже сви морају бити узети у обзир, јер уређивање YAML-а не пренумерише мрежу која ради.
Ако застарела мрежа поседује конфликтну доделу, проверите ко је повезан пре него што је уклоните. docker network rm одбија док постоје активни endpoint-и, а docker stop прихвата имена или ID контејнера, а не име мреже. Заустављање контејнера такође не уклања дефиницију мреже која држи pool.
Широки prune није дијагностичко средство. Досеже неповезане пројекте и уништава доказе које сте управо намеравали да прикупите.
Подразумевани pool-ови помажу само следећој додели
Подешавање подразумеваног pool-а адреса демона побољшава будуће аутоматске доделе држећи их изван опсега које резервишете. Оно не мења ретроактивно адресе мрежа које већ постоје, и не решава експлицитну подмрежу која се преклапа са другом експлицитном подмрежом.
Третирајте то подешавање као одвојену, планирану промену са сопственим рестартом, а не као део поправке једног пројекта. Мешање двога значи да рестарт демона падне усред неповезане истраге. Закажите га у сопственом прозору. Затим потврдите да једна нова аутоматска додела заиста падне изван опсега које сте резервисали.
Када стварање успе, проверите подмрежу која стварно ради и затим упутите један стварни захтев апликације са VPN-ом у његовом предвиђеном стању. Ако је pool валидан, а приступ и даље не успева, преостали посао је избор руте, филтрирање и повратни пут. То је истрага у раду, и она не чини грешку доделе ретроактивно бесмисленом.
Редослед рада: прочитајте додељене pool-ове, изаберите префикс који заобилази и Docker и VPN дестинације, намерно поново направите мрежу, затим тестирајте један захтев са подигнутим тунелом.