Промена default-address-pools не пренумерише мреже које већ имате, и управо то очекивање претвара пажљив план у неочекивани прекид. Подешавање управља аутоматском доделом за мреже створене након што се демон поново покрене са новом конфигурацијом. Све што већ ради задржава додељену подмрежу, јер је та подмрежа део сачуване дефиниције мреже. Мит је згодан јер сугерише да једна измена решава свако преклапање, а стварност је посао у два дела: изаберите опсег који је заиста слободан, а затим мигрирајте мреже које нису.

Мит: једна промена базена решава преклапање

Мит има одређен облик. Неко прочита да се подразумевани базен Docker-а може променити, промени га, поново покрене демон и закључи да се контејнерска мрежа више не судара са канцеларијским VPN-ом. Стара мрежа је још тамо, још је повезана и још држи адресу која се судара.

Променило се будуће понашање додељивача, што је заиста корисно и заиста ограничено. Нове мреже створене без експлицитног --subnet секу се из новог базена; постојеће никада нису биле у том базену. Поновно покретање не преграђује мреже и не премешта контејнере између њих. Ако симптом остане после промене, промена је била стварна, а дијагноза непотпуна.

Основни опсег и додељени префикс

Конфигурација има два поља која је лако заменити. base је опсег из којег додељивач сече, а size је дужина префикса сваке додељене мреже, па основа 10.10.0.0/16 са величином 24 дели /24 унутар тог /16. Замењене улоге дају образац доделе који нисте намеравали, обично једну огромну мрежу или исцрпљен базен.

Базен је резервација, не доказ. Docker избегава конфликте које види у табели рутирања домаћина и не може да види VPN са којим се још нисте повезали.

То ограничење је цео разлог да изаберете свесно. Опсези за поређење су они до којих домаћин мора да стигне: канцеларијски LAN, унутрашње подмреже корпоративног VPN-а, префикси лабораторије или staging-а и сваки други контејнерски домаћин на истом overlay-у. Запишите их као CIDR пре него што дотакнете демон, јер ће списак у глави пропустити управо онај који је важан. Затим изаберите основу која се не преклапа ни са једним и чувајте списак уз распоређивање, да следећа особа не понавља вежбу по сећању.

Попишите пре избора

Прво попишите шта постоји. docker network ls набраја мреже, а docker network inspect bridge -f '{{.IPAM.Config}}' исписује подмрежу коју користи одређена мрежа. Поновите за сваку мрежу коју је дефинисао корисник, јер пројекти Compose стварају своје, а експлицитни --subnet у compose датотеци потпуно заобилази базен.

Та последња тачка преживљава миграцију. Промена базена не спречава колегу да причврсти 172.18.0.0/16 у compose датотеци, а конфликт се враћа са другим аутором.

Миграција онога што већ постоји

Миграција постојећих мрежа је одвојена, подржана операција. Свака погођена мрежа мора поново да се створи са новом подмрежом, што значи одвајање и поновно прикључивање контејнера који је користе, а поновно стварање мреже уклања њене контејнерске прикључке уместо да их премешта. Сачувајте томове и конфигурацију и третирајте поновно стварање као распоређивање, а не као ресетовање података. Радите у прозору за одржавање, јер се контејнери на поново створеној мрежи поново покрећу без обзира на то да ли сте то планирали.

Пратите документовану конфигурацију демона и поступак поновног покретања и ускладите прекид. На домаћину са једним демоном, systemctl restart docker поново покреће контејнере према њиховим политикама поновног покретања, а то је понашање које вреди знати пре, а не после.

Затим проверите две ствари које је промена требало да поправи. Прегледајте нову подмрежу са docker network inspect и потврдите да је унутар изабране основе, затим проверите руту до репрезентативног VPN одредишта са ip route get 10.20.30.40 и потврдите да иде тамо где очекујете, а не у мост. Тестирајте и откривање услуга и комуникацију контејнер-контејнер, јер мрежа поново створена са другачијим адресирањем може да поквари разрешавање имена на начин који изгледа као грешка апликације.

Шта се и даље квари после тога

Трајни део је запис. Чувајте списак додела, изабрану основу и величину, и поново створене мреже на истом месту као распоређивање.

То што је опсег приватан не чини га безбедним за поновну употребу. 10.0.0.0/8 је приватан и истовремено највероватније већ у употреби негде на путу, зато је одговор конкретна резервација, а не преференција једног блока. Документација о мрежама Docker-а описује аутоматску доделу подмрежа и поља базена. Изаберите опсег према ономе до чега морате да стигнете, а не према ономе што изгледа уредно.

Повезани чланци