Tətbiqə network_mode: service:vpn əlavə edir, steqi yenidən başladırsınız və tətbiq ölür, çünki db artıq həll olunmur. Compose faylında heç nə adlandırılmayıb, ona görə də aşkar şübhəlilər DNS və verilənlər bazasıdır. Əsl dəyişiklik daha kiçik və daha qəribədir: tətbiq həmin adın mövcud olduğu Compose şəbəkəsinin üzvü olmaqdan çıxdı. Verilənlər bazasının hansı ad məkanından cavab verməli olduğuna qərar verənə qədər hər host adı düzəlişi təxmindir.

Niyə db host adı həll olunmaqdan çıxdı

network_mode istifadə edən xidmətin Compose şəbəkəsində öz ünvanı yoxdur; o, adlandırılmış xidmətin ad məkanını borc alır. Bu ad məkanı öz interfeyslərini, marşrutlarını, port sahəsini və həlledicisini gətirir və tətbiqin backend şəbəkəsinə bağlanmasını əvəz edir. db adı heç vaxt mücərrəd deyildi: o, həmin şəbəkədə yaşayırdı və daxili DNS vasitəsilə həll olunurdu. Bağlantını götürün və adın həll olunacaq yeri qalmır.

Bunu hostdan deyil, konteynerlərin içindən təsdiqləyin. Tətbiqdə uğursuz olub verilənlər bazası konteynerində uğurlu olan sorğu adın qaydasında olduğunu, üzvlüyün isə olmadığını göstərir. Bu nəticə həmçinin düzəlişi tətbiqin həlledici parametrlərindən compose topologiyasına keçirir.

Faylı redaktə etməzdən əvvəl üç sual

Bunlara ardıcıllıqla cavab verin, çünki hər biri topologiyanı daraldır. Verilənlər bazası nəyə cavab verməlidir: digər konteynerlərin istifadə etdiyi host adına, yoxsa yalnız loopback üzərindəki tətbiqə? Tətbiq hosta port yayımlamalıdır, və hansı xidmət ona sahib olacaq? Verilənlər bazası hostdan və ya başqa maşından əlçatan olmalıdır, yoxsa yalnız tunelin içindən?

Əgər verilənlər bazasına öz adı lazımdırsa və tətbiq heç nə yayımlamırsa, onları ayrı bağlantılarda saxlayın. Əgər tətbiq port yayımlamalıdırsa və hər şey tuneldən keçirsə, verilənlər bazasını VPN ad məkanına qoyun və loopback istifadə edin. İkisini qarışdırmaq təmiz başlayan və bağlantı anında uğursuz olan stek yaradır.

Verilənlər bazasını olduğu yerdə saxlayın

Daha kiçik dəyişiklik ad məkanının sahibini artıq verilənlər bazasını ehtiva edən şəbəkəyə bağlayır. Tətbiq bu bağlantını vpn stekini paylaşdığı üçün miras alır və db əvvəlki kimi həll olunur.

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

networks da tətbiqə əlavə etməyin. Compose eyni xidmətdə bu xüsusiyyəti network_mode ilə birlikdə rədd edir və xəta cütə deyil, fayla işarə edir. Əgər VPN klienti öz ad məkanı daxilində backend təyinatını süzürsə, onun dəstəklənən yerli şəbəkə siyasətini də tənzimləyin; ortaq bağlantı yol təklif edir, lakin həmin süzgəci ləğv etmir.

Verilənlər bazasını ad məkanına köçürün

Daha böyük dəyişiklik verilənlər bazasını eyni ad məkanına qoyur və tətbiqi real portla 127.0.0.1 ünvanına yönəldir. İki proses yalnız müxtəlif konteynerlərdə başladıqları üçün eyni ünvanı və portu birlikdə bağlaya bilməz, buna görə də wildcard ünvanında da dinləyən verilənlər bazası bunu edən başqa nə varsa onunla toqquşacaq. Köçürməzdən əvvəl dinləyicini yoxlayın.

Yayımlanmış portlar ad məkanına sahib xidmətə aiddir. Tətbiqə ports əlavə etmək network_mode ilə birlikdə rədd edilir və ayrıca tətbiq ünvanı uydurmaq mövcud olmayan interfeysi təsvir edir.

Hazırlıq, bloklama və həlledici

depends_on konteynerlərin başlamasını sıralayır; tunelin işlədiyinə dəlil deyil və tunel düşəndə trafiki dayandırmır. Əlçatanlığı, tunel hazırlığını və nasazlıq bloklamasını üç ayrı tələb kimi qəbul edin. Yalnız birincisini ödəyən stek yaxşı gündə əl testindən keçir və pis gündə sızır. Üç cavabı compose faylının yanına yazın, növbəti şəxsin baxacağı yer orasıdır.

Ad məkanını paylaşmaq həm də o deməkdir ki, tətbiq VPN konteynerinin həlledicisini miras alır, bu, tunel DNS serverlərini itələyəndə kömək edir və etməyəndə çaşdırır. Hostun həlledicisinin keçərli olduğunu güman etmək əvəzinə ad məkanının həqiqətən nə ehtiva etdiyini yoxlayın. Compose xidmətləri arayışı network_mode, ports və asılılıq davranışını bir yerdə sənədləşdirir, o cümlədən network_mode xidmətinin niyə öz ünvanı olmadığını.

Əlaqəli məqalələr