Сіз қолданбаға network_mode: service:vpn қосасыз, стекті қайта іске қосасыз, және қолданба өледі, өйткені db енді шешілмейді. compose файлында ешнәрсе қайта аталмаған, сондықтан айқын күдіктілер — DNS және дерекқор. Нақты өзгеріс кішірек және оғаш: қолданба сол атау бар Compose желісінің мүшесі болудан қалды. Дерекқор қай атаулар кеңістігінен жауап беруі керектігін шешпейінше, хост атауын түзетудің бәрі болжам.

Неге db хост атауы шешілуді тоқтатты

network_mode қолданатын қызметтің Compose желісінде өз мекенжайы жоқ; ол аталған қызметтің атаулар кеңістігін қарызға алады. Бұл кеңістік өз интерфейстерін, маршруттарын, порт кеңістігін және шешушісін әкеледі және қолданбаның backend желісіне қосылуын алмастырады. db атауы ешқашан дерексіз болған емес: ол сол желіде өмір сүрді және оның кіріктірілген DNS арқылы шешілді. Қосылуды алып тастаңыз, сонда атаудың шешілетін жері қалмайды.

Мұны хосттан емес, контейнерлердің ішінен растаңыз. Қолданбада сәтсіз болып, дерекқор контейнерінде сәтті болатын іздеу атаудың дұрыс екенін, ал мүшеліктің дұрыс еместігін білдіреді. Бұл нәтиже түзетуді қолданбаның шешуші параметрлеріне емес, compose топологиясына орналастырады.

Файлды өңдеу алдындағы үш сұрақ

Оларға ретімен жауап беріңіз, өйткені әрқайсысы топологияны тарылтады. Дерекқор неге жауап беруі керек: басқа контейнерлер қолданатын хост атауына ма, әлде тек loopback-тегі қолданбаға ма? Қолданба хостқа порт жариялауы керек пе, және қай қызмет оған ие болар еді? Дерекқор хосттан немесе басқа машинадан қолжетімді болуы керек пе, әлде тек туннельдің ішінен бе?

Егер дерекқорға өз атауы қажет болса және қолданба ештеңе жарияламаса, оларды бөлек қосылуларда ұстаңыз. Егер қолданба порт жариялауы керек болса және бәрі туннель арқылы өтсе, дерекқорды VPN атаулар кеңістігіне қойып, loopback қолданыңыз. Екеуін араластыру таза басталып, қосылу кезінде сәтсіз болатын стек жасайды.

Дерекқорды өз орнында қалдырыңыз

Кішірек өзгеріс атаулар кеңістігінің иесін дерекқор бар желіге қосады. Қолданба бұл қосылуды vpn стегін бөлісетіндіктен мұраға алады, және db дәл бұрынғыдай шешіледі.

services:
  vpn:
    networks:
      - backend
  app:
    network_mode: service:vpn
  db:
    networks:
      - backend
networks:
  backend:

networks-ды да қолданбаға қоспаңыз. Compose сол қызметте network_mode-мен қатар бұл қасиетті қабылдамайды, және қате жұпқа емес, файлға нұсқайды. Егер VPN клиенті өз атаулар кеңістігінде backend межесін сүзсе, оның қолдайтын жергілікті желі саясатын да реттеңіз; ортақ қосылу жол ұсынады, бірақ сол сүзгіні жоймайды.

Дерекқорды атаулар кеңістігіне жылжытыңыз

Үлкенірек өзгеріс дерекқорды сол атаулар кеңістігіне қояды және қолданбаны нақты портпен 127.0.0.1 мекенжайына бағыттайды. Екі процесс тек әртүрлі контейнерлерде басталғаны үшін бір мекенжай мен портты екеуі де байланыстыра алмайды, сондықтан wildcard мекенжайында да тыңдайтын дерекқор мұны жасайтын кез келген басқа нәрсемен соқтығысады. Жылжыту алдында тыңдаушыны тексеріңіз.

Жарияланған порттар атаулар кеңістігіне ие қызметке тиесілі. Қолданбаға ports қосу network_mode-мен қатар қабылданбайды, ал жеке қолданба мекенжайын ойлап табу жоқ интерфейсті сипаттайды.

Дайындық, блоктау және шешуші

depends_on контейнерлердің іске қосылуын реттейді; бұл туннельдің жұмыс істеп тұрғанының дәлелі емес және туннель құлағанда трафикті тоқтатпайды. Қолжетімділік, туннель дайындығы және ақауларды блоктауды үш бөлек талап ретінде қарастырыңыз. Тек біріншісін қанағаттандыратын стек жақсы күні қолмен сынақтан өтеді және жаман күні ағады. Үш жауапты compose файлының қасына жазыңыз, келесі адам сонда қарайды.

Атаулар кеңістігін бөлісу сонымен қатар қолданба VPN контейнерінің шешушісін мұраға алады дегенді білдіреді, бұл туннель DNS серверлерін таңғанда көмектеседі және таңбағанда шатастырады. Хосттың шешушісі қолданылады деп болжамдаудың орнына атаулар кеңістігінде нақты не бар екенін тексеріңіз. Compose қызметтер анықтамасы бір жерде network_mode, ports және тәуелділіктердің мінез-құлқын құжаттайды, соның ішінде network_mode қызметінің неге өз мекенжайы жоқ екенін.

Қатысты мақалалар